歡迎光臨
每天分享高質量文章

使用 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技能

贊(0)

分享創造快樂