新聞中心

成都網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)成都定制網(wǎng)頁(yè)設(shè)計(jì)等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都樓梯護(hù)欄等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶的一致贊譽(yù)!
又比如,我們需要在凌晨 5 點(diǎn) 05 分執(zhí)行系統(tǒng)的日志備份,但 Linux 服務(wù)器不是 24 小時(shí)開(kāi)機(jī)的,在晚上需要關(guān)機(jī),白天上班之后才會(huì)再次開(kāi)機(jī),在這個(gè)定時(shí)任務(wù)的執(zhí)行時(shí)間我們的服務(wù)器剛好沒(méi)有開(kāi)機(jī),那么這個(gè)定時(shí)任務(wù)就不會(huì)執(zhí)行了。anacron 就是用來(lái)解決這個(gè)問(wèn)題的。
anacron 會(huì)以 1 天、1周(7天)、一個(gè)月作為檢測(cè)周期,判斷是否有定時(shí)任務(wù)在關(guān)機(jī)之后沒(méi)有執(zhí)行。如果有這樣的任務(wù),那么 anacron 會(huì)在特定的時(shí)間重新執(zhí)行這些定時(shí)任務(wù)。
那么,anacron 是如何判斷這些定時(shí)任務(wù)已經(jīng)超過(guò)執(zhí)行時(shí)間的呢?這就需要借助 anacron 讀取的時(shí)間記錄文件。anacron 會(huì)分析現(xiàn)在的時(shí)間與時(shí)間記錄文件所記載的上次執(zhí)行 anacron 的時(shí)間,將兩者進(jìn)行比較,如果兩個(gè)時(shí)間的差值超過(guò) anacron 的指定時(shí)間差值(一般是 1 天、7 天和一個(gè)月),就說(shuō)明有定時(shí)任務(wù)沒(méi)有執(zhí)行,這時(shí) anacron 會(huì)介入并執(zhí)行這個(gè)漏掉的定時(shí)任務(wù),從而保證在關(guān)機(jī)時(shí)沒(méi)有執(zhí)行的定時(shí)任務(wù)不會(huì)被漏掉。
在 CentOS 6.x 中,使用 cronie-anacron 軟件包取代了 vixie-cron 軟件包。而且在原先 CentOS 版本的 /etc/cron.{daily,weekly,monthly} 目錄中的定時(shí)任務(wù)會(huì)同時(shí)被 cron 和 anacron 調(diào)用,這樣非常容易出現(xiàn)重復(fù)執(zhí)行同一個(gè)定時(shí)任務(wù)的錯(cuò)誤。因此,在 CentOS 6.x 中,/etc/cron.{daily,weekly,monthly} 目錄中的定時(shí)任務(wù)只會(huì)被 anacron 調(diào)用,從而保證這些定時(shí)任務(wù)只會(huì)在每天、每周或每月定時(shí)執(zhí)行一次,而不會(huì)重復(fù)執(zhí)行。
不僅如此,在 CentOS 6.x 中,anacron 還有一個(gè)變化,那就是 anacron 不再是單獨(dú)的服務(wù),而變成了系統(tǒng)命令。也就是說(shuō),我們不再使用“service anacron restart”命令來(lái)管理 anacron 服務(wù)了,而需要使用 anacron 命令來(lái)管理 anacron 工作。
anacron命令的基本格式如下:
[root@localhost ~]# anacron [選項(xiàng)] [工作名]
這里的工作名指的是依據(jù) /etc/anacrontab 文件中定義的工作名。表 1 羅列出了此命令常用的幾個(gè)選項(xiàng)及各自的功能。
| 選項(xiàng) | 功能 |
|---|---|
| -f | 強(qiáng)制執(zhí)行相關(guān)工作,忽略時(shí)間戳。 |
| -u | 更新 /var/spool/anacron/cron.{daily,weekly,monthly} 文件中的時(shí)間戳為當(dāng)前日期,但不執(zhí)行任何工作。 |
| -s | 依據(jù) /etc/anacrontab 文件中設(shè)定的延遲時(shí)間順序執(zhí)行工作,在前一個(gè)工作未完成前,不會(huì)開(kāi)始下一個(gè)工作。 |
| -n | 立即執(zhí)行 /etc/anacrontab 中所有的工作,忽略所有的延遲時(shí)間。 |
| -q | 禁止將信息輸出到標(biāo)準(zhǔn)錯(cuò)誤,常和 -d 選項(xiàng)合用。 |
在當(dāng)前的 Linux 中,其實(shí)不需要執(zhí)行任何 anacron 命令,只需要配置好 /etc/anacrontab 文件,系統(tǒng)就會(huì)依賴這個(gè)文件中的設(shè)定來(lái)通過(guò) anacron 執(zhí)行定時(shí)任務(wù)了。那么,關(guān)鍵就是 /etc/anacrontab 文件的內(nèi)容了。這個(gè)文件的內(nèi)容如下:
[root@localhost ~]# vi /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
#前面的內(nèi)容和/etc/crontab類似
#the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
#最大隨機(jī)廷遲
#the jobs will be started during the following hours only
START_H0URS_RANGE=3-22
#fanacron的執(zhí)行時(shí)間范圍是3:00~22:00
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
#每天開(kāi)機(jī) 5 分鐘后就檢查 /etc/cron.daily 目錄內(nèi)的文件是否被執(zhí)行,如果今天沒(méi)有被執(zhí)行,那就執(zhí)行
7 25 cron.weekly nice run-parts /etc/cron.weekly
#每隔 7 天開(kāi)機(jī)后 25 分鐘檢查 /etc/cron.weekly 目錄內(nèi)的文件是否被執(zhí)行,如果一周內(nèi)沒(méi)有被執(zhí)行,就會(huì)執(zhí)行
?monthly 45 cron.monthly nice run-parts /etc/cron.monthly
#每隔一個(gè)月開(kāi)機(jī)后 45 分鐘檢查 /etc/cron.monthly 目錄內(nèi)的文件是否被執(zhí)行,如果一個(gè)月內(nèi)沒(méi)有被執(zhí)行,那就執(zhí)行
在這個(gè)文件中,“RANDOM_DELAY”定義的是最大隨機(jī)延遲,也就是說(shuō),cron.daily 工作如果超過(guò) 1 天沒(méi)有執(zhí)行,則并不會(huì)馬上執(zhí)行,而是先延遲強(qiáng)制延遲時(shí)間,再延遲隨機(jī)延遲時(shí)間,之后再執(zhí)行命令;“START_HOURS_RANGE”的是定義 anacron 執(zhí)行時(shí)間范圍,anacron 只會(huì)在這個(gè)時(shí)間范圍內(nèi)執(zhí)行。
我們用 cron.daily 工作來(lái)說(shuō)明一下 /etc/anacrontab 的執(zhí)行過(guò)程:
- 讀取 /var/spool/anacron/cron.daily 文件中 anacron 上一次執(zhí)行的時(shí)間。
- 和當(dāng)前時(shí)間比較,如果兩個(gè)時(shí)間的差值超過(guò) 1 天,就執(zhí)行 cron.daily 工作。
- 只能在 03:00-22:00 執(zhí)行這個(gè)工作。
- 執(zhí)行工作時(shí)強(qiáng)制延遲時(shí)間為 5 分鐘,再隨機(jī)延遲 0~45 分鐘。
- 使用 nice 命令指定默認(rèn)優(yōu)先級(jí),使用 run-parts 腳本執(zhí)行 /etc/cron.daily 目錄中所有的可執(zhí)行文件。
大家會(huì)發(fā)現(xiàn),/etc/cron.{daily,weekly,monthly} 目錄中的腳本在當(dāng)前的 Linux 中是被 anacron 調(diào)用的,不再依靠 cron 服務(wù)。不過(guò),anacron 不用設(shè)置多余的配置,我們只需要把需要定時(shí)執(zhí)行的腳本放入 /etc/cron.{daily,weekly,monthly} 目錄中,就會(huì)每天、每周或每月執(zhí)行,而且也不再需要啟動(dòng) anacron 服務(wù)了。如果需要進(jìn)行修改,則只需修改 /etc/anacrontab 配置文件即可。
比如,我更加習(xí)慣讓定時(shí)任務(wù)在凌晨 03:00-05:00 執(zhí)行,就可以進(jìn)行如下修改:
[root@localhost ~] # vi /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=0
#把最大隨機(jī)廷遲改為0分鐘,不再隨機(jī)廷遲
# the jobs will be started during the following hours only START_HOORS_RANGE=3-5
#執(zhí)行時(shí)間范圍為03:00—05:00
#period in days delay in minutes job-identifier command
1 0 cron.daily nice run-parts /etc/cron.daily
7 0 cron.weekly nice run-parts /etc/cron.weekly
@monthly 0 cron.monthly nice run-parts /etc/cron.monthly
#把強(qiáng)制延遲也改為0分鐘,不再?gòu)?qiáng)制廷遲
這樣,所有放入 /etc/cron.{daily,weekly,monthly} 目錄中的腳本都會(huì)在指定時(shí)間執(zhí)行,而且也不怕服務(wù)器萬(wàn)一關(guān)機(jī)的情況了。
網(wǎng)頁(yè)題目:Linuxanacron命令用法詳解
瀏覽路徑:http://www.5511xx.com/article/cocosos.html


咨詢
建站咨詢
