天天看點

Linux——可喚醒停機期間的工作服務

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 定義的各項工作名稱。

Linux——可喚醒停機期間的工作服務

天數       延遲時間      工作名稱定義                            實際要進行的指令串

天數機關為天,延遲時間機關為分鐘,工作名稱可自定義,指令字元串則通常與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/ 

内的執行檔案,以進行固定周期需要執行的指令。