linux計劃任務

本章架構:
1.什麼是例行性工作調度
2.僅執行一次的工作調度
3.循環執行的例行性工作調度
4.可喚醒停機期間的工作任務

一、什麼是例行性工作調度

兩種工作調度的方式:

  • 一種是例行性的,就是每隔一定的週期要來辦的事項
  • 一種是突發性的,就是這次做完以後就沒有的哪一種

1.在Linux下面如何達到這兩個功能呢

1.at :at 是個可以處理僅執行一次就結束調度的指令,不過要執行 at 時, 必須要有 atd 這個服務 的支持才行。在 某些新版的 distributions 中,atd 可能默認並沒有啓動,那麼 at 這個指令就會失效呢!不過我們的 CentOS 默認是啓動的!

2.crontab :crontab 這個指令所設置的工作將會循環的一直進行下去! 可循環的時間爲分鐘、小時、每週、每月或每年等。 crontab 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支持。 至於讓 crontab 可以生效的服務則是 crond 這個服務喔!

2.Linux系統常見的例行性任務

linux計劃任務

二、執行一次的工作調度

1.調度服務at指令

at 的工作情況:

  • 先找尋 /etc/at.allow 這個文件,寫在這個文件中的使用者才能使用 at ,沒有在這個文件中的使用者則不能使用 at (即使沒有寫在 at.deny 當中);
  • 如果 /etc/at.allow 不存在,就尋找 /etc/at.deny 這個文件,若寫在這個 at.deny 的使用者則不能使用 at ,而沒有在這個 at.deny 文件中的使用者,就可以使用 at 咯;
  • 如果兩個文件都不存在,那麼只有 root 可以使用 at 這個指令。

2.at選項與參數

首先來看如何設置一次性任務,命令格式爲:at [HH:MM] [yyyy-mm-dd];

查看一次性任務計劃的命令爲:“ atq ”

刪除一次性任務計劃的命令格式爲:“ atrm [任務編號]”
linux計劃任務

範例:再過五分鐘後,將 /root/ .bashrc寄給 root 自己

linux計劃任務

三、循環執行的例行性工作調度

1.crontab 使用的限制數據有:

  • /etc/cron.allow: 將可以使用 crontab 的帳號寫入其中,若不在這個文件內的使用者則不可使用 crontab;
  • /etc/cron.deny: 將不可以使用 crontab 的帳號寫入其中,若未記錄到這個文件當中的使用者,就可以使用 crontab 。
  • 以優先順序來說, /etc/cron.allow 比 /etc/cron.deny 要優先, 而判斷上面,這兩個文件只選擇一個 來限制而已,因此,建議你只要保留一個即可, 免得影響自己在設置上面的判斷!一般來說,系統默認是保留 /etc/cron.deny , 你 可以將不想讓他執行 crontab 的那個使用者寫入 /etc/cron.deny 當中,一個帳號一行!

2.crontab選項與參數:

linux計劃任務
 
其中 -u user爲
編輯某個用戶的cron,只用root可以使用此參數爲別的用戶設置cron服務。也可用於給用戶指定crontab文件

範例
實例1:列出當前用戶的定時任務

[22:30:17][dodmaster@mha3 ~]$ crontab -l
0 1 * * 1 $HOME/.DailyShell/hislogclear.sh 
0 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/voice
20 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/data/
40 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/sms/

實例2:root用戶編輯用戶martin的定時任務


[22:30:17][root@mha3 ~]# crontab -u martin -e

實例3:爲用戶martin指定定時任務文件

[22:30:17][root@mha3 ~]# crontab -u martin martincron

以下內容說明了系統定時任務的具體書寫格式:
linux計劃任務
linux計劃任務

實例1:每週末的凌晨一點鐘執行一次系統的raid-check

0 1 * * Sun root /usr/sbin/raid-check

實例2:每天的4:02am分root用戶執行/etc/cron.daily目錄下的所有腳本,run-parts參數表示執行後面目錄中的所有腳本。

02 4 * * * root run-parts /etc/cron.daily

實例3:每天的8-18每四小時,dodmaster用戶執行hislogclear.sh腳本,即8:44,12:44,16:44,20:44四個時間點,會執行該腳本。

[21:57:56][dodmaster@mha3 ~]$ crontab -l
44 8-20/4 * * * $HOME/.DailyShell/hislogclear.sh 

實例4:每五分鐘執行一次

*/5 * * * * echo "every five minute to do it" >> time.txt

  

實例5:每個工作日下午八點執行

0 20 * * 1-5 echo "every workday 20:00 to do it" >> time.txt

四、可喚醒停機期間的工作任務

想像一個環境,你的 Linux 服務器有一個工作是需要在每週的星期天凌晨 2 點進行,但是很不巧的,星期六停電了~所以 你得要星期一才能進公司去啓動服務器。 那麼請問,這個星期天的工作調度還要不要進行?
因爲你開機的時候已經是星期一,所以 星期天的工作當然不會被進行,對吧!
問題是,若是該工作非常重要 (例如例行備份), 所以其實你還是希望在下個星期天之前的某天還是進行一下比較好~ 那你該怎辦?自己手動執行?
這時候就 得要靠 anacron 這個指令的功能了!這傢伙可以主動幫你進行時間到了但卻沒有執行的調度喔!

1.什麼是 anacron

  • anacron 並不是用來取代 crontab 的,anacron 存在的目的就在於我們上頭提到的,在處理非 24 小時一直啓動的 Linux 系 統的 crontab 的執行! 以及因爲某些原因導致的超過時間而沒有被執行的調度工作。
  • 其實 anacron 也是每個小時被 crond 執行一次,然後 anacron 再去檢測相關的調度任務有沒有被執行,如果有超過期限的 工作在, 就執行該調度任務,執行完畢或無須執行任何調度時,anacron 就停止了。

anacron參數選項:
linux計劃任務

linux計劃任務

linux計劃任務

2.anacron 的執行流程 (以 cron.daily 爲例):

  • 由 /etc/anacrontab 分析到 cron.daily 這項工作名稱的天數爲 1 天;
  • 由 /var/spool/anacron/cron.daily 取出最近一次執行 anacron 的時間戳記;
  • 由上個步驟與目前的時間比較,若差異天數爲 1 天以上 (含 1 天),就準備進行指令;
  • 若準備進行指令,根據 /etc/anacrontab 的設置,將延遲 5 分鐘 + 3 小時 (看 START_HOURS_RANGE 的設置);
  • 延遲時間過後,開始執行後續指令,亦即“ run-parts /etc/cron.daily ”這串指令;
  • 執行完畢後, anacron 程序結束。

3.crond 與 anacron 的關係:

  • crond 會主動去讀取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,並依據“分、時、日、月、周”的時間設置去各項工作調度;
  • 根據 /etc/cron.d/0hourly 的設置,主動去 /etc/cron.hourly/ 目錄下,執行所有在該目錄下的可執行文件;
  • 因爲 /etc/cron.hourly/0anacron 這個指令檔的緣故,主動的每小時執行 anacron ,並調用 /etc/anacrontab 的配置文件;
  • 根據 /etc/anacrontab 的設置,依據每天、每週、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 內的可執行文 件,以進行固定週期需要執行的指令。

也就是說,如果你每個週日的需要執行的動作是放置於 /etc/crontab 的話,那麼該動作只要過期了就過期了,並不會被抓 回來重新執行。但如果是放置在 /etc/cron.weekly/ 目錄下,那麼該工作就會定期,幾乎一定會在一週內執行一次~如果你關機超過一 周,那麼一開機後的數個小時內,該工作就會主動的被執行喔! 真的嗎?因爲 /etc/anacrontab 的定義啦!
注:基本上,crontab 與 at 都是“定時”去執行,過了時間就過了!不會重新來一遍~
那 anacron 則是“定期”去執行,某一段週期的執行 ~ 因此,兩者可以並行,並不會互相沖突啦!

———————— 本文至此結束,感謝閱讀 ————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章