crontab學習日誌 .
crontab學習日誌 .
剛接觸crontab,看了好多文章。小總結一下,以備突擊排查。
概念:
crontab: 在Unix或類Unix系統中,用於設置執行計劃的命令。可以使用它來設置定期執行某個命令。
crond: 它是一個守護進程,每分鐘(最小單位只到分鐘,所以不要指望指定在哪一秒執行)會檢查一次是否有需要執行的crontab計劃。如果有就會激活crontab文件里定義的指令。
cronfile: crontab文件,這類文件裡頭放著一些指令。這些指令就是我們想要定期執行的指令。
格式:
cronfile的格式:
t1 t2 t3 t4 t5 program
其中 t1 是表示分鐘,t2 表示小時,t3 表示一個月份中的第幾日,t4 表示月份,t5 表示一個星期中的第幾天。program 表示要執行的程序。
當 t1 為 * 時表示每分鐘都要執行 program,t2 為 * 時表示每小時都要執行程式,其餘類推
當 t1 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,t2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
當 t1 為 */n 時表示每 n 分鐘個時間間隔執行一次,t2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推 (這一點,有一些版本的unix不支持)
當 t1 為 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,t2 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推
設計crontab計劃的格式:
# crontab [-option] | cronfile
option:
-e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的文字編輯器,則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(比如說 setenv VISUAL joe)
-r : 刪除目前的時程表
-l : 列出目前的時程表
-v :列出用戶cron作業的狀態
路徑:
/etc/crontab:crontab配置文件
/var/spool/cron/: 使用crontab時,會在這個目錄下新建一個cronfile的副本。取名就是當前系統用戶名,如:root。其實守護進程crond就是從這裡提取文件的。
/var/spool/mail/{用戶名}: 默認的crontab每次執行,會發送一個郵件到當前用戶的郵箱里。所以你可以在這個當前用戶的郵箱里查看郵件,如果/var/spool/mail/root里查看root的crontab郵件。
/var/log/cron*: 在/var/log/下所有ls cron* 文件都是crontab的日誌文件。可以查看日誌。
crontab文件的例子:
每月每天每小時的第 0 分鐘執行一次 /bin/ls :
0 * * * * /bin/ls
在 12 月內, 每天的早上 6 點到 12 點中,每隔 20 分鐘執行一次 /usr/bin/backup :
*/20 6-11 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信給
[email protected] :
0 17 * * 1-5 mail -s "hi"
[email protected] < /tmp/maildata
每月每天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分....執行 echo "haha"
20 0-23/2 * * * echo "haha"
晚上11點到早上8點之間每兩個小時,早上8點
0 23-7/2,8 * * * date
crontab使用方法:
列出crontab文件
為了列出crontab文件,可以用:
$crontab -l
編輯crontab文件
如果希望添加、刪除或編輯crontab文件中的條目,而EDITOR環境變數又設置為vi,那麼就可以用vi來編輯crontab文件,相應的命令為:
$ crontab -e
可以像使用vi編輯其他任何文件那樣修改crontab文件並退出。
刪除crontab文件
為了刪除crontab文件,可以用:
$ crontab -r
恢復丟失的crontab文件
如果不小心誤刪了crontab文件,假設你在自己的$HOME目錄下還有一個備份,那麼可以將其拷貝到/var/spool/cron/
,其中是用戶名。如果由於許可權問題無法完成拷貝,可以用:
$ crontab
其中,是你在$HOME目錄中副本的文件名。 《解決方案》
http://bbs.chinaunix.net/thread-2291457-1-1.html