Linux計劃任務

Linux任務計劃

一、定義

在特定的時間按照事先定義好的腳本規則執行的任務。管理員在管理服務器的時候,需要在特定地某個時間執行某個任務,就要用到Linux系統的計劃任務。例如運行時間需要精確到分鐘;或者在凌晨執行某個腳本等

二、分類

1、單次任務

2、週期性任務

三、主要命令

1atbatch

2crontab

1at

定義在未來時間點一次性執行某任務;支持使用作業隊列,默認爲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

UNITminutehourdayweek

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?

如圖:

wKioL1XtNgSiN65kAACbIJeKDho192.jpg

結果是系統時間已經超出計劃任務的執行時間,但是任務未執行

wKioL1XtNhDgUpjNAACvFrpPJBg523.jpg

查看atd服務狀態

wKiom1XtM_Oga-CWAABKzRafs4g499.jpg 

啓動服務

wKioL1XtNimAyf2LAABE0VfF4fw977.jpg

再次atq查看任務,OK

wKioL1XtNjXDmRMpAAFVwvWnp58608.jpg

2batch

由系統自行選擇在資源較爲空閒時運行指定的任務;

3crontab

定義週期性任務計劃,守護進程crond

分類:

1、系統cron任務:沒有默認運行用戶,需要額外指定運行者

配置文件:/etc/crontab文件指定運行shell,環境變量PATH,郵件接收者和默認家目錄

需要用戶定義的字段:

*  *  *  *  * user-name command to be executed

1、前五個*代表運行時間週期。分別是分鐘,小時,日,月,星期

2user-name:額外指定的運行用戶

3command to be executed:要運行的任務命令或腳本

2、用戶cron任務:由某個用戶所提交,默認就以提交者的身份運行,所以無需額外指定運行者

配置文件:/var/spool/cron/USERNAME

需要用戶定義的字段:

*  *  *  *  * command to be executed

1、前五個*代表運行時間週期。分別是分鐘,小時,日,月,星期

2command 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) crontabPATH變量與用戶的變量不完全相同,所以,建議在cron中的任務要使用絕對路徑

 

四、練習:

1、每週一到週六的凌晨320分,運行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)

wKioL1Xulm3SY07lAAFCbaqcwiM404.jpg

2、每週日凌晨230分,運行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)

wKiom1XulFXjrKjlAAEyPkP1V5k261.jpg

3、每天晚上12點,取得/proc/meminfo文件中所有以SM開頭的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上類似===============分隔線;

0 0 * * * /bin/echo "======================" >> /statistics/meminfo.txt && /bin/grep '^[S|M]' /proc/meminfo >> /statistics/meminfo

 wKioL1Xulo3QgvCrAAJBMVFFxhU037.jpg

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章