Linux任務計劃
一、定義
在特定的時間按照事先定義好的腳本規則執行的任務。管理者在管理伺服器的時候,需要在特定地某個時間執行某個任務,就要用到Linux系統的計劃任務。例如運作時間需要精确到分鐘;或者在淩晨執行某個腳本等
二、分類
1、單次任務
2、周期性任務
三、主要指令
(1)、at、batch
(2)、crontab
1、at
定義在未來時間點一次性執行某任務;支援使用作業隊列,預設為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
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中的任務要使用絕對路徑
四、練習:
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