之前聽說過這個命令,但沒有研究過;最近因為業務需要,要做系統自動定時執行腳本任務,於是進行了以下測試:
1.crontab基礎知識
[root@rac2 sbin]# service crond start ---查看crontab服務是否啟動 Starting crond: cannot start crond: crond is already runnin[FAILED] [root@rac2 sbin]# ps -ef|grep crond ---查看crontab進程 root 2959 1 0 21:47 ? 00:00:00 crond root 3509 3457 0 21:51 pts/1 00:00:00 grep crond [root@rac2 sbin]# crontab --help ---查看使用幫助 crontab: invalid option -- - crontab: usage error: unrecognized option usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -s (selinux context) [root@rac2 sbin]# crontab -u root -l ---查看root用戶當前是否有自動執行計划 no crontab for root [root@rac2 sbin]# crontab -l no crontab for root
2.編寫一個自己的自動定時執行計划
[root@rac2 sbin]# crontab -e no crontab for root - using an empty one crontab: no changes made to crontab
看別人這樣就可以進入vi界面編寫計划,我編寫后,但提示 no changes made to crontab。
[root@rac2 sbin]# crontab -l no crontab for root
查看一下,依然還是沒有。應該是編輯失敗了,不知道為什么?
突然想到,可以這樣試試:
[root@rac2 sbin]# crontab -u root -e no crontab for root - using an empty one crontab: installing new crontab
在彈出的vi界面 編寫了:* */1 * * * echo "Have a good dream" >> /tmp/test.txt
-------意思是每各一分鍾,向 /tmp/test.txt 文件里面插入一條“Have a good dream” 信息。
-------注:/tmp/test.txt 這個test.txt 是會自動生成的。
這次提示:crontab: installing new crontab,應該是ok了。
[root@rac2 sbin]# crontab -l * */1 * * * echo "Have a good dream" >> /tmp/test.txt [root@rac2 sbin]#
自動定時腳本編輯成功了。
檢查一下/tmp/test.txt,執行結果也正確。
[root@rac2 ~]# cd /tmp [root@rac2 tmp]# ls gconfd-root keyring-NcCgMA keyring-YCitrn virtual-root.2D8HSv virtual-root.i8tzq0 keyring-fbdP86 keyring-UJUfuW mapping-root virtual-root.DKtizo virtual-root.ppMHJx keyring-jq9tuZ keyring-WoIlNb test.txt virtual-root.GQc6wM virtual-root.vDHQoi [root@rac2 tmp]# tail -f test.txt Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream
3.crontab語法介紹
/etc/crontab文件語法如下:
Minute Hour Day Month Dayofweek command
分鍾 小時 天 月 天每星期 命令
每個字段代表的含義如下:
• Minute 每個小時的第幾分鍾執行該任務
• Hour 每天的第幾個小時執行該任務
• Day 每月的第幾天執行該任務
• Month 每年的第幾個月執行該任務
• DayOfWeek 每周的第幾天執行該任務
• Command 指定要執行的程序
在這些字段里,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對於不指定的字段,要用“*”來填補其位置。
同時,cron支持類似正則表達式的書寫,支持如下幾個特殊符號定義:
• "*"代表取值范圍內的數字,
• "/"代表"每",
• "-"代表從某個數字到某個數字,
• ","分開幾個離散的數字
例子:
30 5 * * * ls 指定每天的 5:30 執行ls命令
30 7 8 * * ls 指定每月8號的7:30分執行ls命令
17 5 * * 0 /etc/cleanup > /dev/null 每周星期日5:17清除系統上的某些日志文件
0 2 * 1 * rm -rf /usr/userbk*.log 每月1日2:00刪除/usr/userbk下的日志文件