cron
cron 是 linux 中運行例行性工作的一個服務捡多,守護進程是
crond休玩,是一個用于運行計劃任務如系統(tǒng)備份、更新等的守護進程馋艺。它適合在那些 7x24 小時不間斷運行的機器如服務器上運行的計劃任務嚎卫。
我們可以通過下面的命令去配置定時任務
crontab -e
這個 crontab -e 是針對使用者的 cron 來設計的肝断,如果是系統(tǒng)的例行性任務時,可以通過編輯 /etc/crontab 來實現(xiàn)。cron 這個服務的最低偵測限制是分鐘胸懈,所以 cron 會每分鐘去讀取一次 /etc/crontab 與 /var/spool/cron 里面的數(shù)據(jù)內(nèi)容 担扑,因此,只要你編輯完 /etc/crontab 這個文件趣钱,并且將他儲存之后涌献,那么 cron 的配置就自動運行了
定時任務的格式如下
Example of job definition:
.---------------- 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
| | | | |
* * * * * user-name command to be executed
Tips:
在 Linux 底下的 crontab 會自動的幫我們每分鐘重新讀取一次 /etc/crontab 的例行工作事項,但是某些原因或者是其他的 Unix 系統(tǒng)中首有,由於 crontab 是讀到內(nèi)存當中的燕垃,所以在你修改完 /etc/crontab 之后,可能并不會馬上運行井联, 這個時候請重新啟動 crond 這個服務卜壕,/etc/init.d/crond restart
anacron
如果你的服務器并非是 7x24 小時的運行,定時任務的執(zhí)行時間可能剛好在服務器關閉期間烙常,這個時候可以anacron就派上用場了
anacron 并不是用來取代 crontab 的轴捎,anacron 存在的目的就在于我們上頭提到的,在處理非 24 小時一直啟動的 Linux 系統(tǒng)的 crontab 的運行蚕脏!所以 anacron 并不能指定何時運行某項任務侦副, 而是以天為單位或者是在啟動后立刻進行 anacron 的動作,他會去偵測停機期間應該進行但是并沒有進行的 crontab 任務驼鞭,并將該任務運行一遍后秦驯,anacron 就會自動停止了
由于 anacron 會以一天、七天挣棕、一個月為期去偵測系統(tǒng)未進行的 crontab 任務译隘,因此對于某些特殊的使用環(huán)境非常有幫助。 舉例來說洛心,如果你的 Linux 主機是放在公司給同事使用的固耘,因為周末假日大家都不在所以也沒有必要開啟, 因此你的 Linux 是周末都會關機兩天的皂甘。但是 crontab 大多在每天的凌晨以及周日的早上進行各項任務, 偏偏你又關機了悼凑,此時系統(tǒng)很多 crontab 的任務就無法進行偿枕。 anacron 剛好可以解決這個問題
那么 anacron 又是怎么知道我們的系統(tǒng)啥時關機的呢?這就得要使用 anacron 讀取的時間記錄檔 (timestamps) 了户辫! anacron 會去分析現(xiàn)在的時間與時間記錄檔所記載的上次運行 anacron 的時間渐夸,兩者比較后若發(fā)現(xiàn)有差異, 那就是在某些時刻沒有進行 crontab 渔欢!此時 anacron 就會開始運行未進行的 crontab 任務了墓塌! 所以 anacron 其實也是透過 crontab 來運行的!因此 anacron 運行的時間通常有兩個,一個是系統(tǒng)啟動期間運行苫幢,一個是寫入 crontab 的排程中访诱。 這樣才能夠在特定時間分析系統(tǒng)未進行的 crontab 工作
anacron 任務被列在 /etc/anacrontab 中,任務可以使用下面的格式
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
從上面的格式中:
period - 這是任務的頻率韩肝,以天來指定触菜,或者是@daily 、@weekly哀峻、@monthly 代表每天涡相、每周、每月一次剩蟀。你也可以使用數(shù)字:1 - 每天催蝗、7 - 每周、30- 每月育特,或者N - 幾天丙号。
delay - 這是在執(zhí)行一個任務前等待的分鐘數(shù)。
job-id - 這是寫在日志文件中任務的獨特名字且预。
command - 這是要執(zhí)行的命令或 shell 腳本槽袄。
例子:
1 5 cron.daily nice run-parts /etc/cron.daily #每天都執(zhí)行/etc/cront.daily/目錄下的腳本文件,真實的延遲RANDOM_DELAY+delay锋谐。這里的延遲是5分鐘遍尺,加上上面的RANDOM_DELAY,所以實際的延遲時間是5-50之間涮拗,開始時間為03-22點乾戏,如果機器沒關,那么一般就是在03:05-03:50之間執(zhí)行三热。nice命令將該進程設置為nice=10鼓择,默認為0,即低優(yōu)先級進程就漾。
區(qū)別
cron | anacron |
---|---|
守護進程 | 不是守護進程 |
適合7x24小時運行的服務器 | 適合非7x24小時運行的服務器 |
可以讓你以分鐘級運行計劃任務有 | 只能讓你以天為基礎來運行計劃任務 |
關機時不會執(zhí)行計劃任務 | 如果計劃任務到期呐能,機器是關機的,那么它會在機器下次開機后執(zhí)行計劃任務 |
普通用戶和 root 用戶都可以使用 | 只有 root 用戶可以使用(使用特定的配置啟動普通任務) |