linux在安裝系統過程中會安裝crond這麼一個服務工具,並隨系統啓動而啓動,成爲守護進程daemon,即後臺服務,目的就是定期檢查是否存在需要週期性執行的任務。
相關的配置文件有/etc/crontab,以及/var/spool/cron/目錄下以用戶名命名的各個用戶的crontab配置文件。而/etc/crontab文件負責系統任務調度,即全局計劃任務,/etc/crontab文件內容如下(以Centos 6.0爲例):
[root@localhost ~]# vi /etc/crontab
SHELL=/bin/bash #指定執行所用到的shell終端
PATH=/sbin:/bin:/usr/sbin:/usr/bin #指定環境變量,以便執行某條命令的時候可不使用絕對路徑
MAILTO=root #指定執行返回結果發送到指定用戶的郵箱目錄中,默認爲/var/spool/mail/xxx,此處xxx爲root,指代root的郵箱目錄
HOME=/ #指定執行命令或腳本時使用的主目錄
# For details see man 4 crontabs
# Example of job definition: #此處爲crond計劃任務填寫格式說明
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
*/10 * * * * echo "hello world" >> /usr/local/test/test2 #此行意義爲在每天,每月,每小時,每隔10分鐘都執行一次echo "hello world"並把結果輸到/usr/local/test/test2
文件中,屬自定義系統計劃任務。
*號可以有多種定義方式,比如1-2表示從第1到第2分鐘等等;1,2,3,4表示同時在多個時間段執行;*/2表示每2個單位時間執行一次。此類定義均可以複合使用,如23-7/1表示從23到7的時間段內,每個1個時間單位執行某個操作。
一般情況下不建議直接在此文件改動,而是在/etc/cron.d目錄下放置相應的任務腳本,crond執行時,讀取三個地方的配置文件/etc/crontab,和/etc/cron.d,以及每個用戶相應的配置文件,可用crontab -u [user] -l 查看,相應地還有/etc目錄下對應每個按時間執行的腳本目錄,即/etc/cron.hourly,/etc/cron.daily,/etc/weekly,/etc/cron.monthly分別對應每小時,每天,每週,每個月運行一次對應目錄下的腳本,相應地,該規則應該這樣寫(星號從左往右依次代表分,時,天,月,星期):
* * * * * run-parts /etc/cron.hourly
* * * * * run-parts /etc/cron.daily
* * * * * run-parts /etc/cron.weekly
* * * * * run-parts /etc/cron.monthly
舉個例子,
10 * 03 * * run-parts /etc/cron.hourly
意爲每個月的3號那天每小時的第10分鐘執行一遍/etc/cron.hourly目錄下的腳本,相應的,由於使用的是cron.hourly目錄,即每小時執行一次任務,所以對應的“小時”位不用設置,其餘選項類推。run-parts選項後接目錄的絕對路徑,沒有run-parts則後面跟的是腳本文件或者系統命令。
crond由於是系統服務項,所以相應的可以有如下的針對服務的操作命令:
service crond start|stop|restart|reload|status 分別對應crond服務的啓動,停止,重啓,重新加載配置文件和狀態
而crond自身有如下命令選項
crontab -l #列出當前用戶的crontab文件內容,即計劃任務,若不使用-u [user]指定用戶則默認顯示當前用戶,下同
crontab -e #編輯用戶的crontab文件
crontab -r #刪除用戶位於/var/spool/cron/下的crontab文件,每個用戶均有一個文件夾與其對應
crontab -i #在刪除crontab文件時出現確認提示
crontab -u [user] #指定某個用戶進行操作,當指定用戶進行操作後,相應地在/var/spool/cron/目錄下會出現對應用戶名的crontab文件
另,位於/etc/cron.deny文件裏的用戶表示不允許使用crontab命令,同理有/etc/cron.allow表示允許使用,若/etc/目錄下同時出現這兩個文件則策略以allow爲主