cron 是一個(gè)可以用來(lái)根據(jù)時(shí)間、日期、月份、星期的組合來(lái)調(diào)度對(duì)重復(fù)任務(wù)的執(zhí)行的守護(hù)進(jìn)程。
cron 假定系統(tǒng)持續(xù)運(yùn)行。如果當(dāng)某任務(wù)被調(diào)度時(shí)系統(tǒng)不在運(yùn)行,該任務(wù)就不會(huì)被執(zhí)行。要調(diào)度一次性的任務(wù),請(qǐng)參閱第 37.2 節(jié)。
要使用 cron 服務(wù),你必須安裝了 vixie-cron RPM 軟件包,而且必須在運(yùn)行 crond 服務(wù)。要判定該軟件包是否已安裝,使用 rpm -q vixie-cron 命令。要判定該服務(wù)是否在運(yùn)行,使用 /sbin/service crond status 命令。
37.1.1. 配置 cron 任務(wù)
cron 的主配置文件是 /etc/crontab,它包括下面幾行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly |
前四行是用來(lái)配置 cron 任務(wù)運(yùn)行環(huán)境的變量。SHELL 變量的值告訴系統(tǒng)要使用哪個(gè) shell 環(huán)境(在這個(gè)例子里是 bash shell);PATH 變量定義用來(lái)執(zhí)行命令的路徑。cron 任務(wù)的輸出被郵寄給 MAILTO 變量定義的用戶名。如果 MAILTO 變量被定義為空白字符串(MAILTO=""),電子郵件就不會(huì)被寄出。HOME 變量可以用來(lái)設(shè)置在執(zhí)行命令或腳本時(shí)使用的主目錄。
/etc/crontab 文件中的每一行都代表一項(xiàng)任務(wù),它的格式是:
minute hour day month dayofweek command |
minute — 分鐘,從 0 到 59 之間的任何整數(shù)
hour — 小時(shí),從 0 到 23 之間的任何整數(shù)
day — 日期,從 1 到 31 之間的任何整數(shù)(如果指定了月份,必須是該月份的有效日期)
month — 月份,從 1 到 12 之間的任何整數(shù)(或使用月份的英文簡(jiǎn)寫(xiě)如 jan、feb 等等)
dayofweek — 星期,從 0 到 7 之間的任何整數(shù),這里的 0 或 7 代表星期日(或使用星期的英文簡(jiǎn)寫(xiě)如 sun、mon 等等)
command — 要執(zhí)行的命令(命令可以是 ls /proc >> /tmp/proc 之類的命令,也可以是執(zhí)行你自行編寫(xiě)的腳本的命令。)
在以上任何值中,星號(hào)(*)可以用來(lái)代表所有有效的值。譬如,月份值中的星號(hào)意味著在滿足其它制約條件后每月都執(zhí)行該命令。
整數(shù)間的短線(-)指定一個(gè)整數(shù)范圍。譬如,1-4 意味著整數(shù) 1、2、3、4。
用逗號(hào)(,)隔開(kāi)的一系列值指定一個(gè)列表。譬如,3, 4, 6, 8 標(biāo)明這四個(gè)指定的整數(shù)。
正斜線(/)可以用來(lái)指定間隔頻率。在范圍后加上 /<integer> 意味著在范圍內(nèi)可以跳過(guò) integer。譬如,0-59/2 可以用來(lái)在分鐘字段定義每?jī)煞昼姟ig隔頻率值還可以和星號(hào)一起使用。例如,*/3 的值可以用在月份字段中表示每三個(gè)月運(yùn)行一次任務(wù)。
開(kāi)頭為井號(hào)(#)的行是注釋,不會(huì)被處理。
如你在 /etc/crontab 文件中所見(jiàn),它使用 run-parts 腳本來(lái)執(zhí)行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目錄中的腳本,這些腳本被相應(yīng)地每小時(shí)、每日、每周、或每月執(zhí)行。這些目錄中的文件應(yīng)該是 shell 腳本。
如果某 cron 任務(wù)需要根據(jù)調(diào)度來(lái)執(zhí)行,而不是每小時(shí)、每日、每周、或每月地執(zhí)行,它可以被添加到 /etc/cron.d 目錄中。該目錄中的所有文件使用和 /etc/crontab 中一樣的語(yǔ)法。范例請(qǐng)參見(jiàn)例 37-1。
# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh |
例 37-1. crontab 的例子
根用戶以外的用戶可以使用 crontab 工具來(lái)配置 cron 任務(wù)。所有用戶定義的 crontab 都被保存在 /var/spool/cron 目錄中,并使用創(chuàng)建它們的用戶身份來(lái)執(zhí)行。要以某用戶身份創(chuàng)建一個(gè) crontab 項(xiàng)目,登錄為該用戶,然后鍵入 crontab -e 命令,使用由 VISUAL 或 EDITOR 環(huán)境變量指定的編輯器來(lái)編輯該用戶的 crontab。該文件使用的格式和 /etc/crontab 相同。當(dāng)對(duì) crontab 所做的改變被保存后,該 crontab 文件就會(huì)根據(jù)該用戶名被保存,并寫(xiě)入文件 /var/spool/cron/username 中。
cron 守護(hù)進(jìn)程每分鐘都檢查 /etc/crontab 文件、etc/cron.d/ 目錄、以及 /var/spool/cron 目錄中的改變。如果發(fā)現(xiàn)了改變,它們就會(huì)被載入內(nèi)存。這樣,當(dāng)某個(gè) crontab 文件改變后就不必重新啟動(dòng)守護(hù)進(jìn)程了。
37.1.2. 控制對(duì) cron 的使用
/etc/cron.allow 和 /etc/cron.deny 文件被用來(lái)限制對(duì) cron 的使用。這兩個(gè)使用控制文件的格式都是每行一個(gè)用戶。兩個(gè)文件都不允許空格。如果使用控制文件被修改了,cron 守護(hù)進(jìn)程(crond)不必被重啟。使用控制文件在每次用戶添加或刪除一項(xiàng) cron 任務(wù)時(shí)都會(huì)被讀取。
無(wú)論使用控制文件中的規(guī)定如何,根用戶都總是可以使用 cron。
如果 cron.allow 文件存在,只有其中列出的用戶才被允許使用 cron,并且 cron.deny 文件會(huì)被忽略。
如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用戶都被禁止使用 cron。
37.1.3. 啟動(dòng)和停止服務(wù)
要啟動(dòng) cron 服務(wù),使用 /sbin/service crond start 命令。要停止該服務(wù),使用 /sbin/service crond stop 命令。推薦你在引導(dǎo)時(shí)啟動(dòng)該服務(wù)。
文章來(lái)源:
http://blog.itpub.net/post/7956/48958