1. 程式人生 > >[ shell編程 ] crontab使用方法

[ shell編程 ] crontab使用方法

運行時 控制臺 mce 副本 pps ech 同時 用法 腳本

在學習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使用方法