1、anacron
anacron不是用來取代crontab的,anacron存在的目的在于處理非24小時一直啟動的Linux系統的crontab的執行,以及某些原因導緻的超過時間而沒有被執行的排程工作anacron每個小時會被crond執行一次。
2、anacron與/etc/anacrontab
anacron是一支程式,其配置檔案被放置在/etc/cron.hourly
anacron的文法如下:
[[email protected] ~]# anacron [-sfn] [job]..
[[email protected] ~]# anacron -u [job]..
選項與參數:
-s :開始一連續的執行各項工作 (job),會依據時間記錄檔案的資料判斷是否進行;
-f :強制進行,而不去判斷時間記錄檔案的時間戳;
-n :立刻進行未進行的任務,而不延遲 (delay) 等待時間;
-u :僅更新時間記錄檔案的時間戳,不進行任何工作。
job :由 /etc/anacrontab 定義的各項工作名稱。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXw0EVOFTSE9EeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TNyMTOxMTNwIjNxATM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
天數 延遲時間 工作名稱定義 實際要進行的指令串
天數機關為天,延遲時間機關為分鐘,工作名稱可自定義,指令字元串則通常與crontab的設定相同。
[[email protected] ~]# anacron [-sfn] [job]..
[[email protected] ~]# anacron -u [job]..
選項與參數:
-s :開始一連續的執行各項工作 (job),會依據時間記錄檔案的資料判斷是否進行;
-f :強制進行,而不去判斷時間記錄檔案的時間戳;
-n :立刻進行未進行的任務,而不延遲 (delay) 等待時間;
-u :僅更新時間記錄檔案的時間戳,不進行任何工作。
job :由 /etc/anacrontab 定義的各項工作名稱。
· 天數:anacron 執行當下與時間戳 (/var/spool/anacron/ 内的時間紀錄檔案) 相差的天數,若超過此天數,就
準備開始執行,若沒有超過此天數,則不予執行後續的指令。
· 延遲時間:若确定超過天數導緻要執行排程工作了,那麼請延遲執行的時間,因為擔心立即啟動會有其他
資源沖突的問題吧!
· 工作名稱定義:這個沒啥意義,就隻是會在 /var/log/cron 裡頭記載該項任務的名稱這樣!通常與後續的目
錄資源名稱相同即可。
· 實際要進行的指令串:有沒有跟 0hourly 很像啊!沒錯!相同的作法啊!透過 run-parts 來處理的!
根據上面的配置檔案内容,我們大概知道 anacron 的執行流程應該是這樣的 (以 cron.daily 為例):
(1) 由 /etc/anacrontab 分析到 cron.daily 這項工作名稱的天數為 1 天;
(2) 由 /var/spool/anacron/cron.daily 取出最近一次執行 anacron 的時間戳;
(3) 由上個步驟與目前的時間比較,若差異天數為 1 天以上 (含 1 天),就準備進行指令;
(4) 若準備進行指令,根據 /etc/anacrontab 的設定,将延遲 5 分鐘 + 3 小時 (看 START_HOURS_RANGE 的設定);
(5) 延遲時間過後,開始執行後續指令,亦即『 run-parts /etc/cron.daily 』這串指令;
(6) 執行完畢後, anacron 程式結束。
crond 與anacron 的關系:
1. crond 會主動去讀取 /etc/crontab, /var/spool/cron/*, /etc/cron.d/* 等配置檔案,并依據『分、時、日、月、周』
的時間設定去各項工作排程;
2. 根據 /etc/cron.d/0hourly 的設定,主動去 /etc/cron.hourly/ 目錄下,執行所有在該目錄下的執行檔案;
3. 因為 /etc/cron.hourly/0anacron 這個腳本檔案的緣故,主動的每小時執行 anacron ,并呼叫 /etc/anacrontab
的配置檔案;
4. 根據 /etc/anacrontab 的設定,依據每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/
内的執行檔案,以進行固定周期需要執行的指令。