如何在本地搭建網(wǎng)站什么網(wǎng)站百度收錄快
15.4.1 什么是 anacron
anacron 并不是用來取代 crontab 的,anacron 存在的目的就在于我們上頭提到的,在處理非24 小時一直啟動的 Linux 系統(tǒng)的 crontab 的執(zhí)行! 以及因為某些原因?qū)е碌某^時間而沒有被執(zhí)行的調(diào)度工作。
其實 anacron 也是每個小時被 crond 執(zhí)行一次,然后 anacron 再去檢測相關(guān)的調(diào)度任務(wù)有沒有被執(zhí)行,如果有超過期限的工作在, 就執(zhí)行該調(diào)度任務(wù),執(zhí)行完畢或無須執(zhí)行任何調(diào)度時,anacron 就停止了。
15.4.2 anacron 與 /etc/anacrontab
anacron 其實是一支程序并非一個服務(wù)!這支程序在 CentOS 當中已經(jīng)進入 crontab 的調(diào)度,同時 anacron 會每個小時被主動執(zhí)行一次。
基本上, anacron 的語法如下:
在我們的 CentOS 中,anacron 的進行其實是在每個小時都會被抓出來執(zhí)行一次, 但是為了擔心 anacron 誤判時間參數(shù),因此 /etc/cron.hourly/ 里面的 anacron 才會在文件名之前加個 0(0anacron),讓 anacron 最先進行!就是為了讓時間戳記先更新!以避免 anacron 誤判crontab 尚未進行任何工作的意思。
接下來看一下 anacron 的配置文件: /etc/anacrontab 的內(nèi)容好了:
我們拿 /etc/cron.daily/ 那一行的設(shè)置來說明好了。那四個字段的意義分別是:
天數(shù):anacron 執(zhí)行當下與時間戳記 (/var/spool/anacron/ 內(nèi)的時間紀錄檔) 相差的天數(shù),若超過此天數(shù),就準備開始執(zhí)行,若沒有超過此天數(shù),則不予執(zhí)行后續(xù)的指令。
延遲時間:若確定超過天數(shù)導致要執(zhí)行調(diào)度工作了,那么請延遲執(zhí)行的時間,因為擔心立即啟動會有其他資源沖突的問題吧!
工作名稱定義:這個沒啥意義,就只是會在 /var/log/cron 里頭記載該項任務(wù)的名稱這樣!通常與后續(xù)的目錄資源名稱相同即可。
實際要進行的指令串:通過 run-parts來處理的!
根據(jù)上面的配置文件內(nèi)容,我們大概知道 anacron 的執(zhí)行流程應該是這樣的 (以 cron.daily為例):
1. 由 /etc/anacrontab 分析到 cron.daily 這項工作名稱的天數(shù)為 1 天;
2. 由 /var/spool/anacron/cron.daily 取出最近一次執(zhí)行 anacron 的時間戳記;
3. 由上個步驟與目前的時間比較,若差異天數(shù)為 1 天以上 (含 1 天),就準備進行指令;
4. 若準備進行指令,根據(jù) /etc/anacrontab 的設(shè)置,將延遲 5 分鐘 + 3 小時 (看START_HOURS_RANGE 的設(shè)置);
5. 延遲時間過后,開始執(zhí)行后續(xù)指令,亦即“ run-parts /etc/cron.daily ”這串指令;
6. 執(zhí)行完畢后, anacron 程序結(jié)束。
最后總結(jié)一下crond與anacron的關(guān)系:
1. crond 會主動去讀取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,并依據(jù)“分、時、日、月、周”的時間設(shè)置去各項工作調(diào)度;
2. 根據(jù) /etc/cron.d/0hourly 的設(shè)置,主動去 /etc/cron.hourly/ 目錄下,執(zhí)行所有在該目錄下的可執(zhí)行文件;
3. 因為 /etc/cron.hourly/0anacron 這個指令檔的緣故,主動的每小時執(zhí)行 anacron ,并調(diào)用 /etc/anacrontab 的配置文件;
4. 根據(jù) /etc/anacrontab 的設(shè)置,依據(jù)每天、每周、每月去分析 /etc/cron.daily/,/etc/cron.weekly/, /etc/cron.monthly/ 內(nèi)的可執(zhí)行文件,以進行固定周期需要執(zhí)行的指令。
也就是說,如果你每個周日的需要執(zhí)行的動作是放置于 /etc/crontab 的話,那么該動作只要過期了就過期了,并不會被抓回來重新執(zhí)行。但如果是放置在 /etc/cron.weekly/ 目錄下,那么該工作就會定期,幾乎一定會在一周內(nèi)執(zhí)行一次~如果你關(guān)機超過一周,那么一開機后的數(shù)個小時內(nèi),該工作就會主動的被執(zhí)行。
15.5 重點回顧
系統(tǒng)可以通過 at 這個指令來調(diào)度單一工作的任務(wù)!“at TIME”為指令下達的方法,當 at進入調(diào)度后, 系統(tǒng)執(zhí)行該調(diào)度工作時,會到下達時的目錄進行任務(wù);
at 的執(zhí)行必須要有 atd 服務(wù)的支持,且 /etc/at.deny 為控制是否能夠執(zhí)行的使用者帳號;
通過 atq, atrm 可以查詢與刪除 at 的工作調(diào)度;
batch 與 at 相同,不過 batch 可在 CPU 工作負載小于 0.8 時才進行后續(xù)的工作調(diào)度;系統(tǒng)的循環(huán)例行性工作調(diào)度使用 crond 這個服務(wù),同時利用 crontab -e 及 /etc/crontab 進行調(diào)度的安排;
crontab -e 設(shè)置項目分為六欄,“分、時、日、月、周、指令”為其設(shè)置依據(jù);
/etc/crontab 設(shè)置分為七欄,“分、時、日、月、周、執(zhí)行者、指令”為其設(shè)置依據(jù);
anacron 配合 /etc/anacrontab 的設(shè)置,可以喚醒停機期間系統(tǒng)未進行的 crontab 任務(wù)!