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