簡述
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)
- 新創(chuàng)建的cron job,不會馬上執(zhí)行,至少要過2分鐘才執(zhí)行。如果重啟cron則馬上執(zhí)行。
- 當(dāng)crontab失效時(shí),可以嘗試/etc/init.d/crond restart解決問題?;蛘卟榭慈罩究茨硞€job有沒有執(zhí)行/報(bào)錯tail -f /var/log/cron。
- 千萬別亂運(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’。