在我們日常伺服器管理中,不管是Windows還是Linux都不可避免的會用到計劃任務這個東西。比如說我們某天要在淩晨3點進行一次完整備份,作為運維人員咱不能設個鬧鐘淩晨三點爬起來一台台的敲指令打包上傳到檔案伺服器吧。假如你夠勤快、有幹勁、精神好,可伺服器有100台呢....
通常我們的做法是寫個腳本,指定時間計算機自動執行完成任務然後把錯誤輸出發郵件到郵箱。第二天檢查下郵件就可以了。
計劃任務分為2種,一種是在未來的某個時間點執行一次任務,然後是周期性的執行任務。
linux下某個時間點執行一次任務的命名有at、batch
at 指令的用法如下
at 時間
at> COMMAND
下面可以寫多個指令,寫好之後按Ctrl+d送出
例:我們要在21:20執行目前目錄下的./check.sh跟debug.sh,如果時間已經過了那麼就下一個21:20執行
時間我們可以指定相對時間和絕對時間
指定絕對時間:HH:MM DD.MM.YY
例:at 11:30 20.03.2016 在2016年03月20 11:30開始執行
指定相對時間:now+#
常用機關有:m(分鐘)、h(小時)、d(天)、w(星期)
例:at now+3m 從現在開始3分鐘後開始執行
設定好了之後要想檢視任務清單輸入:at -l
删除一個任務則使用:at -d # 或者atrm #
例:at -d 1 删除at任務清單的1号任務
atrm 1
我們如果不想某個使用者使用at指令,則在/etc/at.deny檔案中把該使用者的使用者名放進去就好了(黑名單功能)
batch指令跟at指令的差別在于batch指令不需要指定時間,它會自動選擇系統空閑的時候執行一次。
如果需要周期性的執行任務,則需要用到crontab指令,這個指令其實操作一個叫cron的服務。我們可以對其進行開始、停止、重新開機,指令跟啟動apache之類的服務是一樣的。
service crond start
service crond stop
service crond restart
指令用法:
crontab -e 編輯計劃任務
假如我們要增加一條計劃任務
先輸入crontab -e 然後開始編輯任務,編輯完按wq儲存退出
格式為:*(分鐘)*(小時) *(天) *(月) *(星期) 指令/腳本
例:*/5 * * * * /home/usr1/check.sh 每五分鐘執行check.sh這個腳本
crontab -l 檢視目前計劃任務清單
crontab -r 移除所有任務,如果隻删除一個任務的自行用crontab -e 腦補
經常在論壇上看到有人發帖問為什麼我寫的cron任務怎麼不正常執行?
這裡就涉及到環境變量了,cron的所有指令都去PATH的環境變量指定的路徑下去找
如果你寫的指令放在其他路徑,cron就找不到指令自然就執行不了
解決方法:
在編輯任務的時候使用指令的絕對路徑,如果是腳本的話寫腳本的時候先定義腳本的環境變量,這樣腳本執行的時候就使用的自身的環境變量了。