Linux crontab定時任務的使用


crontab是Unix和Linux用於設置周期性被執行的軟件包,服務器上很多系統任務都會周期性執行,比如重啟某個服務器,定期清理日志等。這就可以使用crontab。將任務注冊到cron進程查看的配置文件中,這樣cron周期性地查看這些配置文件時,將會執行設置好的定時任務。在實際開發和部署中,大部分程序都不需要定時自維護,只需要寫好自己的業務邏輯,通過crond這個工業級程序調度即可。


cron

cron是一個系統Daemon進程,一般掛在init下。筆者的kali2中cron這個進程就是掛在init下。這個進程主要工作是定期檢查用戶注冊的任務信息,並調用相應的任務執行。所以當用戶新加入了定時任務后,也不需要重啟此進程,cron會自動檢測和維護一個作業列表。


crontab

這是一個cron注冊信息的工具。cron不提倡直接編輯注冊信息文件,使用這個crontab可以比較容易的完成注冊工作。注意,這個工具是針對各個用戶的,並非針對系統管理員,對於系統管理員,則可以直接編輯/etc/crontab文件進行任務配置,作系統級配置。


簡單使用

假設如下命令希望每天每隔一分鍾執行一次:

date >> /var/log/date_testing
則我們可以使用crontab來注冊這一任務

crontab -e
首次打開可能會需要你選擇默認的編輯器,自己選擇即可,我選擇的vim basic。之后就可以開始寫上配置信息:

* * * * * date >> /var/log/date_testing

上例五個星號代表運行時間,分別是 :分 時 日 月  每周的日。星號代表任意值,也就是說,任意年,任意月,任意時,任意分,任意日,都執行后接的命令。關於時間格式,下文講解。保存文件退出后,使用如下命令將會看到剛才注冊的任務:

crontab -l
這樣,查看日志文件/var/log/date_testing即可看到每分鍾執行的輸出。 注意:在一般情況下,若沒有設置命令輸出重定向(date是有輸出的,輸出到stdout),則以郵件的形式發送到運行的用戶信箱。久而久之這些信息會非常大,可能需要人工處理。所以妥善管理任務程序的輸出是比較好的選擇


時間格式
上文例子中提到了任務注冊的時間格式。以下是具體的時間格式講解。

字段 值范圍
minute 0-59
hour 0-23
day of month 0-31
month 1-12或name
day of week 0-7或name

除了具體值,指定在具體某一時刻(如分字段的6代表每小時第6分鍾,月字段的3代表每年的3月),還可以使用通配符和其他描述符號。

*代表取任意值,如在分字段上標示任意分鍾都會執行,每一分鍾;在月字段上表示每一月都會執行。

-代表取某個范圍(短橫線,減號)。如在時字段上取值1-18表示每天1時到18時,這期間每個小時。分字段上的5-10表示每小時的第五分鍾到第十分鍾,這期間每分鍾。

,代表具體值枚舉(逗號)。比如分字段上的2,3,4,8表示每小時中第二、第三、第四、第八分時刻。

/n代表每隔 n 單位間隔,n 代表間隔多長,例如每五分鍾進行一次,則可在分字段標示0-59/5,在0-59時間段里每五分鍾里。這個符號一般與上面三個符號連用。

注意:周與日月不能同時設定,這樣可能cron無法准確獲取時間。周字段中0代表周天。

上面可能說的模棱兩可,下面有些例子,可以幫助理解:

43 21 * * *              21:43 執行
15 05 * * * 05:15 執行
0 17 * * * 17:00 執行
0 17 * * 1 每周一的 17:00 執行
0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 執行
0-10 17 1 * * 毎月1日從 17:00到7:10 毎隔1分鍾 執行
0 0 1,15 * * 毎月1日和 15日和 一日的 0:00 執行
42 4 1 * * 毎月1日的 4:42分 執行
0 21 * * 1-6 周一到周六 21:00 執行
0,10,20,30,40,50 * * * * 每隔10分 執行
*/10 * * * * 每隔10分 執行
* 1 * * * 從1:0到1:59 每分鍾 執行
0 1 * * * 1:00 執行
0 */1 * * * 毎時0分 每隔1小時 執行
0 * * * * 毎時0分 每隔1小時 執行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 執行
30 5 1,15 * * 1日 和 15日的 5:30 執行
例子是網上找的,但也都可以用,筆者已經檢查過。


其他

這里主要說一些自己查到和翻閱manpage看到的內容
1) Debian中的cron增加了一個系統級任務特性,這個特性一般便於系統管理,在/etc/目錄下有基於時(cron.hourly)、日(cron.daily)、月(cron.monthly)、周(cron.weekly)的任務注冊文件,系統級任務都將記錄注冊在這些文件中。並且作業通過run-parts調用。


2)當使用crontab注冊任務時,是為用戶注冊,非管理員,當然管理員也可以通過這個工具注冊。注冊的作業並不是存放在/etc/crontab文件,而是按照用戶不同,在目錄/var/sqool/cron下創建以用戶名命名的目錄,並將注冊信息填寫在此目錄的文件中。


3)/etc/crontab文件一般給管理員用戶查看。


4)在Debian下cron的日志寫在syslog中,可以在/var/log/syslog中查看。


寫在后面

本文中有很多信息來自互聯網,例子都經過測試,在kali2系統(基於Debian)上無誤。若有不足或錯誤,歡迎各位指正。



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com