當前位置:
首頁 > 知識 > 使用 anacron 定期執行任務

使用 anacron 定期執行任務

(點擊

上方公眾號

,可快速關注)




來源:暗無天日 ,


lujun9972.github.io/blog/2018/04/19/使用anacron定期執行任務/




anacron與cron的不同點



在網上可以可以看到很多文章都把anacron與cron來做比較,但實際上這兩者之間的差距還是蠻大的。






  1. cron任務同通過常駐的守護進程crond來定期執行的。 而anacron則不是守護進程,它需要被別人定期掉起,比如跟cron或systemd timer配合



  2. crond每分鐘檢查一次是否有需要執行的任務,若這次任務錯過了時間則需要等下次觸發點才能再次執行。 而anacron會立即執行錯過時間的任務,而正是由於這個特點,為了防止在不恰當的時刻執行命令,anacron專門有一個參數START_HOURS_RANGE來設置允許執行命令的時間段。



  3. cron的粒度能精確到分鐘,而anacron的粒度只能到天(即執行頻率不能超過1天1次)



  4. cron的執行時間是很精確的. 而anacron可以設置一個延遲時間(RANDOMDELAY),anacron會在這個延遲時間內的某一個隨機時間點執行。 這樣做的好處在於可以讓任務的執行時間分散,防止一瞬間對伺服器產生太大壓力。



  5. cron有多個設置任務的地方(/var/spool/cron/用戶名, /etc/crontab, /etc/cron.d/*). 而anacron只有一個設置任務的地方(默認為 /etc/anacrontab, 也可以通過 -t 設置其他路徑的配置文件)。




從上面可以看出,anacron其實並不是設計來定時執行任務的,它的主要功能還是為了緩解cron中一瞬間大量任務並發執行而導致系統壓力過大的問題。



/etc/anacrontab配置文件說明




一個 /etc/anacrontab 內容大致如下:





cat /etc/anacrontab




# /etc/anacrontab: configuration file for anacron


 


# See anacron(8) and anacrontab(5) for details.


 


SHELL=/bin/sh


PATH=/sbin:/bin:/usr/sbin:/usr/bin


MAILTO=root


# the maximal random delay added to the base delay of the jobs


RANDOM_DELAY=45


# the jobs will be started during the following hours only


START_HOURS_RANGE=3-22


 


#period in days   delay in minutes   job-identifier   command


1 5 cron.daily    nice run-parts /etc/cron.daily


7 25  cron.weekly   nice run-parts /etc/cron.weekly


@monthly 45 cron.monthly    nice run-parts /etc/cron.monthly




看起來跟 cron 的配置文件有點像。都是先定義環境變數,再定義執行計劃。




定義環境變數的部分跟cron一樣,只是這些環境變數中,有一些特殊變數值得說明一下:




RANDOME_DELAY=45


表示anacron在執行任務前先延時一段隨記的時間再執行,這段隨機的時間為0-45分鐘之內的隨機數。




START_HOURS_RANGE=3-22


指定了只有在凌晨3點到晚上22點這個時間段內才允許執行任務。




定義執行計劃部分就跟 cron 差別很大了。




執行計劃由四部分組成:



period in days


輪迴天數,表示任務多少天執行一次。




delay in minutes


表示啟動Anacron和運行作業時間之間的延遲,單位為分鐘. 當然前提是自最後一次運行之後所經過的時間超出了輪迴天數。 但是它並不是作業真正運行的時間,真正運行的時間還需要加上RANDOME_DELAY中設置的隨機分鐘數。




job-identifier


作業的標識符。anacron在執行任務時會將日期寫入 /var/spool/anacron/$job-identifier 文件中




command


實際運行的命令。這裡的 run-parts 是一個運行指定目錄中所有程序與腳本的命令,可以通過 man run-parts 來查看它的說明




anacron常用的選項




anacron的常用選項有下面幾個:




-t 配置文件路徑


讓anacron從指定配置文件中讀取配置,常用於普通用戶來管理個人任務




-S spooldir


設定新的spool目錄來記錄任務執行的時間戳,常用於普通用戶來管理個人任務




-T


測試配置文件是否正確




-f


強制執行所有的任務,而不管之前的執行日期是否超過輪迴天數




-u


將所有任務的執行日期都更新為當前日期,而不真正的執行任務




-s


串列地執行任務,只有前一個任務完成後才開始下一個任務




看完本文有收穫?請轉發分享給更多人


關注「ImportNew」,提升Java技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

通向架構師的道路(第二十五天)SSH 的單元測試與 dbunit 的整合
到底多少線程算是線程數太多?

TAG:ImportNew |