天天看點

Linux計劃任務

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?

如圖:

Linux計劃任務
結果是系統時間已經超出計劃任務的執行時間,但是任務未執行
Linux計劃任務
檢視atd服務狀态
Linux計劃任務
啟動服務
Linux計劃任務
再次atq檢視任務,OK!
Linux計劃任務

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)      
Linux計劃任務

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)      
Linux計劃任務

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

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

繼續閱讀