Linux任務計劃shell
1、定義bash
在特定的時間按照事先定義好的腳本規則執行的任務。管理員在管理服務器的時候,須要在特定地某個時間執行某個任務,就要用到Linux系統的計劃任務。例如運行時間須要精確到分鐘;或者在凌晨執行某個腳本等服務器
2、分類ide
1、單次任務spa
2、週期性任務命令行
3、主要命令blog
(1)、at、batch隊列
(2)、crontab進程
1、atcrontab
定義在將來時間點一次性執行某任務;支持使用做業隊列,默認爲a隊列,隊列命名爲單字母;
at [option]... TIME
TIME:
1、絕對時間
HH:MM
MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD
tomorrow
2、相對時間
now+#UNIT
UNIT:minute,hour,day,week
3、模糊時間
midnight
noon
teatime
option:
-q QUEUE:指定at做業隊列
-f FILENAME:執行文件FILENAME中做業任務
-l:查看做業隊列中等待執行的做業任務,等同於atq命令
-c at_job_nu:查看等待執行做業內容
-d:刪除指定做業。等同於atrm
注:at TIME 命令行輸入要執行的任務命令,按ctrl+d結束本次輸入,並生成一個任務計劃。
問題一:Can't open /var/run/atd.pid to signal atd. No atd running?
如圖:
結果是系統時間已經超出計劃任務的執行時間,可是任務未執行
查看atd服務狀態
啓動服務
再次atq查看任務,OK!
2、batch
由系統自行選擇在資源較爲空閒時運行指定的任務;
3、crontab
定義週期性任務計劃,守護進程crond
分類:
(1)、系統cron任務:沒有默認運行用戶,須要額外指定運行者
配置文件:/etc/crontab;文件指定運行shell,環境變量PATH,郵件接收者和默認家目錄
須要用戶定義的字段:
* * * * * user-name command to be executed
1、前五個*表明運行時間週期。分別是分鐘,小時,日,月,星期
2、user-name:額外指定的運行用戶
3、command to be executed:要運行的任務命令或腳本
(2)、用戶cron任務:由某個用戶所提交,默認就以提交者的身份運行,因此無需額外指定運行者
配置文件:/var/spool/cron/USERNAME
須要用戶定義的字段:
* * * * * command to be executed
1、前五個*表明運行時間週期。分別是分鐘,小時,日,月,星期
2、command to be executed:要運行的任務命令或腳本
時間點取值:
1、分鐘----[0,59]
2、小時----[0,23]
3、日------[1,31]
4、月------[1,12]或簡寫英文[Jan,Feb,Mar,Apr,May,June,July,Aug,Sept,Oct,Nov,Dec]
5、星期----[0,7]或簡寫英文[Mon,Tue,wed,Thu,Fri,Sat,Sun] 0,7均爲星期天
注意:幾月幾號與周幾,不建議同時使用
時間表示方法:
*:對應時間點有效取值範圍的任意時間點
-:特定連續時間範圍,例如4-10
,:多個離散的時間點,例如4,5,7,10
/#:有效時間範圍內的每#時間;用於指定頻率,例如1-30/2,*/4
命令使用:
crontab [-u user] [-l | -r | -e]
-u:僅root用戶使用,管理某用戶的任務計劃
-l:顯示任務列表
-r:移除全部任務
-e:編輯當前用戶的任務
注意:
(1) 若是不想接收任務執行結果的通知郵件:
COMMAND > /dev/null
COMMAND &> /dev/null
(2) 對於crontab文件來說,%有特殊功用;若是命令中會出現%, 要記得轉義,或者用單引號對其引用;
(3) crontab的PATH變量與用戶的變量不徹底相同,因此,建議在cron中的任務要使用絕對路徑
4、練習:
1、每週一到週六的凌晨3點20分,運行cp命令對/etc/目錄進行歸檔另存,存儲位置爲/backups/etc-YYYY-MM-DD;
20 3 * * 1-6 /bin/cp -a /etc/ /backups/etc-`/bin/date '+\%Y-\%m-\%d'` 20 3 * * 1-6 /bin/cp -a /etc/ /backups/etc-$(/bin/date +\%F)
2、每週日凌晨2點30分,運行cp命令對/etc/fstab文件進行備份,存儲位置爲/backup/fstab-YYYY-MM-DD-hh-mm-ss
30 2 * * 7 /bin/cp -a /etc/fstab /backup/fstab-`/bin/date '+\%Y-\%m-\%d-\%H-\%M-\%S'` 30 2 * * 7 /bin/cp -a /etc/fstab /backup/fstab-$(/bin/date +\%F-\%H-\%M-\%S)
3、天天晚上12點,取得/proc/meminfo文件中全部以S或M開頭的行,追加至/statistics/meminfo.txt文件中,且天天的消息以前,要加上相似===============分隔線;
0 0 * * * /bin/echo "======================" >> /statistics/meminfo.txt && /bin/grep '^[S|M]' /proc/meminfo >> /statistics/meminfo