新聞中心

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


咨詢
建站咨詢
