crontab定時(shí)任務(wù)

簡述

Linux系統(tǒng)下提供了一個非常有用的定時(shí)任務(wù)命令crontab,我們可以在固定的間隔時(shí)間執(zhí)行指定的系統(tǒng)指令或 shell script腳本。時(shí)間間隔的單位可以是分鐘、小時(shí)、日、月、周及以上的任意組合。這個命令非常適合周期性的日志分析或數(shù)據(jù)備份等工作。

命令格式

crontab [-u user] file
crontab [-u user] [-l | -r | -e][-i]
參數(shù) 說明
-u user 用來設(shè)定某個用戶的crontab服務(wù)。
file file是命令文件的名字,表示將file做為crontab的任務(wù)列表文件并載入。
crontab 如果在命令行中沒有指定這個文件,crontab命令將接受標(biāo)準(zhǔn)輸入(鍵盤)上鍵入的命令,并將它們載入crontab。
-e 編輯某個用戶的crontab文件內(nèi)容。如果不指定用戶,則表示編輯當(dāng)前用戶的crontab文件
-l 顯示某個用戶的crontab文件內(nèi)容,如果不指定用戶,則表示顯示當(dāng)前用戶的crontab文件內(nèi)容。
-r 從/var/spool/cron目錄中刪除某個用戶的crontab文件,如果不指定用戶,則默認(rèn)刪除當(dāng)前用戶的crontab文件。
-i 在刪除用戶的crontab文件時(shí)給確認(rèn)提示。

crontab文件格式

文件格式:

第一列 第二列 第三列 第四列 第五列 第六列
時(shí) 星期 要運(yùn)行的命令

看一個例子:

* * * * * echo `date` >> /tmp/cron.log

第1列:分鐘0~59
第2列:小時(shí)0~23(0表示子夜)
第3列:日1~31
第4列:月1~12
第5列:星期0~7(0和7表示星期天)
第6列:要運(yùn)行的命令

對于每一列,有如下格式:

格式 說明 示例
* 對第一列來講,表示每分鐘執(zhí)行命令,以此類推 如: * * * * * cmd表示每分鐘執(zhí)行命令cmd
a,b 對第一列來講,表示第a,b分鐘執(zhí)行命令,以此類推 如:5,10 * * * * cmd表示第5分鐘和10分鐘執(zhí)行命令cmd
a-b 對第一列來講,表示第a到b分鐘執(zhí)行命令,以此類推 如:5-10 * * * * cmd表示每小時(shí)的5到10分鐘執(zhí)行命令cmd
*/n 對第一列來講,表示第隔n分鐘執(zhí)行命令,以此類推 如:*/5 * * * * cmd表示每隔5分鐘執(zhí)行命令cmd

所以上面的例子是每分鐘將時(shí)間重寫向到/tmp/cron.log文件中。

常用方式

創(chuàng)建一個新的crontab文件

創(chuàng)建一個名為<user> cron的文件,其中<user>是用戶名,例如, davecron在該文件中加入如下的內(nèi)容:

* * * * * echo `date` >> /tmp/cron.log

在上面的例子中,系統(tǒng)將每隔1分鐘向/tmp/cron.log寫入一次當(dāng)前時(shí)間。如果系統(tǒng)崩潰或掛起,從最后所顯示的時(shí)間就可以一眼看出系統(tǒng)是什么時(shí)間停止工作的。為了提交你剛剛創(chuàng)建的crontab文件,可以把這個新創(chuàng)建的文件作為cron命令的參數(shù):

crontab davecron

列出crontab文件

$ crontab -l
* * * * * echo `date` >> /tmp/cron.log

編輯crontab文件

crontab -e

注:最好在crontab文件的每一個條目之上加入一條注釋,這樣就可以知道它的功能、運(yùn)行時(shí)間,更為重要的是,知道這是哪位用戶的定時(shí)作業(yè)。

刪除crontab文件

crontab -r

使用實(shí)例

實(shí)例1:每1分鐘執(zhí)行一次cmd

* * * * * cmd

實(shí)例2:每小時(shí)的第3和第15分鐘執(zhí)行

3,15 * * * * cmd

實(shí)例3:在上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行

3,15 8-11 * * * cmd

實(shí)例4:每隔兩天的上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行

3,15 8-11 */2  *  * cmd

實(shí)例5:每周一上午8點(diǎn)到11點(diǎn)的第3和第15分鐘執(zhí)行

3,15 8-11 * * 1 cmd

實(shí)例6:每晚的21:30執(zhí)行

30 21 * * * cmd

實(shí)例7:每月1、10、22日的4 : 45執(zhí)行

45 4 1,10,22 * * cmd

實(shí)例8:每周六、周日的1 : 10執(zhí)行

10 1 * * 6,0 cmd

實(shí)例9:每天18 : 00至23 : 00之間每隔30分鐘執(zhí)行

*/30 18-23 * * * cmd

實(shí)例10:每星期六的晚上11 : 00 pm執(zhí)行

0 23 * * 6 cmd

實(shí)例11:每一小時(shí)執(zhí)行

0 */1 * * * cmd

實(shí)例12:晚上11點(diǎn)到早上7點(diǎn)之間,每隔一小時(shí)執(zhí)行

0 23-7 * * * cmd

注意事項(xiàng)

  1. 新創(chuàng)建的cron job,不會馬上執(zhí)行,至少要過2分鐘才執(zhí)行。如果重啟cron則馬上執(zhí)行。
  2. 當(dāng)crontab失效時(shí),可以嘗試/etc/init.d/crond restart解決問題?;蛘卟榭慈罩究茨硞€job有沒有執(zhí)行/報(bào)錯tail -f /var/log/cron。
  3. 千萬別亂運(yùn)行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除用戶的Crontab文件。刪除了該用戶的所有crontab都沒了。
    4.在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進(jìn)行轉(zhuǎn)義%,如經(jīng)常用的date ‘+%Y%m%d’在crontab里是不會執(zhí)行的,應(yīng)該換成date ‘+%Y%m%d’。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容