[ shell編程 ] crontab使用方法
在學習crontab命令之前,你看下有沒有碰到過如下場景:
(1)測試服務器每天都會產生很多垃圾文件,手工每天去清理非常繁瑣,如何讓系統自動按時清理呢?
(2)如何定時收集服務器的關鍵信息呢?
利用crontab命令,就可以完成腳本的定時執行。下面我們來看下crontab命令的用法
1、crontab中相關的域
分< >時< >日< >月< >星期< >要運行的命令
其中< >表示空格,總共分為6列。我們了解crontab中每一列所代表的含義:
第1列 分鐘(1~59)
第2列 小時(1~23,0表示子夜)
第3列 日(1~31)
第4列 月(1~12)
第5列 星期(0~6,0表示星期天)
第6列 要運行的命令(請使用絕對路徑)
在這些域中,可以用橫杠"-"來表示一個時間範圍,例如你希望星期一至星期五運行某個作業,那麽可以在星期域使用1-5來表示。還可以在這些域中使用逗號",",例如你希望星期一和星期四運行某個作業,只需要使用1,4來表示。可以用星號*來表示連續的時間段。如果你對某個表示時間的域沒有特別的限定,也應該在該域填入*。該文件的每一個條目必須含有 5個時間域,而且每個域之間要用空格分隔。該文件中所有的註釋行要在行首用#來表示。
2、crontab例子
(1)每天晚上的21:30運行/apps/bin/cleanup.sh腳本
30 21* * * /apps/bin/cleanup.sh
(2)每月1、10、22日的4:45運行/apps/bin/backup.sh腳本
45 4 1,10,22 * * /apps/bin/backup.sh
(3)每周六、周日的1:10運行find命令
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
(4)每天18:00至23:00之間每隔30分鐘運行/apps/bin/dbcheck.sh腳本
0,30 18-23 * * * /apps/bin/dbcheck.sh
3、crontab命令選項
根據上述的內容,我們知道了cron單個任務的配置規則,那麽這一節主要了解怎麽使用crontab命令針對任務進行新增、修改、刪除的操作。
crontab命令的一般形式為:crontab [-u user] -e -l -r
其中:
-u 用戶名。
-e 編輯crontab文件。
-l 列出crontab文件中的內容。
-r 刪除crontab文件。
如果使用自己的名字登錄,就不用使用-u選項,因為在執行crontab命令時,該命令能夠知道當前的用戶。
3.1 創建一個新的crontab文件
創建一個名為<user>cron的文件,其中<user>是用戶名,例如davecron。在該文件中加入如下的內容
0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console
保存並退出。確保前面5個域用空格分隔。在上面的例子中,系統將每隔15分鐘向控制臺輸出一次當前時間。如果系統崩潰或掛起,從最後所顯示的時間就可以一眼看出系統是什麽時間停止工作的。
為了提交你剛剛創建的crontab文件,可以把這個新創建的文件作為crontab命令的參數:
$ crontab davecron
現在該文件已經提交給cron進程,它將每隔15分鐘運行一次。同時,新創建文件的一個副本已經被放在 /var/spool/cron目錄中,文件名就是用戶名(即dave)。
3.2 列出crontab文件
為了列出crontab文件,可以用:
$crontab -l
0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console
為了防止誤刪crontab文件,可以使用如下方法對crontab文件做個備份:
$ crontab -l > $HOME/mycron
3.3 編輯crontab文件
$ crontab -e
這時我們可以像使用vi編輯其他任何文件那樣修改crontab文件並退出。如果修改了某些條目或添加了新的條目,那麽在保存該文件時,cron會對其進行必要的完整性檢查。如果其中的某個域出現了超出允許範圍的值,它會提示你。我們在編輯crontab文件時,沒準會加入新的條目。例如,加入下面的一條:
#DT:delete core files,at3,30am on 1,7,14,21,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name "core" -exec rm {} \;
保存並退出。最好在crontab文件的每一個條目之上加入一條註釋,這樣就可以知道它的功能、運行時間,更為重要的是,知道這是哪位用戶的作業。
現在讓我們使用前面講過的crontab -l命令列出它的全部信息:
$ crontab -l
0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console
#DT:delete core files,at3,30am on 1,7,14,21,26 days of each month
30 3 1,7,14,21,26 * * /bin/find -name "core" -exec rm {} \;
3.4 刪除crontab文件
$ crontab -r
[ shell編程 ] crontab使用方法