天天看點

cron與anacron:如何在Linux中計劃任務

cron與anacron:如何在Linux中計劃任務

在本篇中,我們會解釋 cron 和 anacron,并向你展示如何在 linux 中設定 anacron。我們也會比較這兩個工具。

要在一個給定時間或者稍後安排一個任務,你可以使用 at 或者 batch 指令,要使指令能夠重複運作,你可以使用 cron 以及 anacron 工具。

cron - 是一個用于運作計劃任務如系統備份、更新等的守護程序。它适合在那些 24x7 不間斷運作的機器如伺服器上運作的計劃任務。

指令/腳本被寫在 cron 任務腳本中,它是在 crontab 檔案中被安排的。系統預設的 crontab 檔案是 /etc/crontab,但是每個使用者也可以建立自己的 crontab 檔案來在特定時間運作使用者定義的指令。

要建立一份個人 crontab 檔案,隻要輸入:

$ crontab -e 

如何在 linux 中設定 anacron

anacron 用于以天為機關的頻率運作指令。它的工作與 cron 稍有不同,它假設機器不會一直開機。

cron 也适合在那些不會 24x7 運作如筆記本以及桌面電腦的機器上運作每日、每周以及每月的計劃任務(lctt 譯注:不适合按小時、分鐘執行任務)。

假設你有一個計劃任務(比如備份腳本)要使用 cron 在每天半夜運作,也許你以及睡着,那時你的桌面/筆記本電腦已經關機。你的備份腳本就不會被運作。

然而,如果你使用 anacron,你可以確定在你下次開啟桌面/筆記本電腦的時候,備份腳本會被執行。

anacron 如何在 linux 工作

anacron 任務被列在 /etc/anacrontab 中,任務可以使用下面的格式(anacron 檔案中的注釋必須以 # 号開始)安排。

period   delay   job-identifier   command 

從上面的格式中:

period - 這是任務的頻率,以天來指定,或者是 @daily、@weekly、@monthly 代表每天、每周、每月一次。你也可以使用數字:1 - 每天、7 - 每周、30 - 每月,或者 n - 幾天。

delay - 這是在執行一個任務前等待的分鐘數。

job-id - 這是寫在日志檔案中任務的獨特名字。

command - 這是要執行的指令或 shell 腳本。

要浏覽示例檔案,輸入:

$ ls -l /var/spool/anacron/ 

total 12 

-rw------- 1 root root 9 jun  1 10:25 cron.daily 

-rw------- 1 root root 9 may 27 11:01 cron.monthly 

-rw------- 1 root root 9 may 30 10:28 cron.weekly 

這是實際發生的:

anacron 會檢查任務是否已經在 period 字段指定的時間被被執行了。如果沒有,則在等待 delay 字段中指定的分鐘數後,執行 command 字段中指定的指令。

一旦任務被執行了,它會使用 job-id(時間戳檔案名)字段中指定的名稱将日期記錄在 /var/spool/anacron 目錄中的時間戳檔案中。

現在讓我們看一個例子。這個會每天運作 /home/aaronkilik/bin/backup.sh 腳本:

@daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh 

當機器在 backup.sh 期望被運作時是關機的,anacron 會在機器開機十分鐘之後運作它,而不用再等待 7 天。

這裡有兩個你應該了解的 anacrontab 檔案的重要變量:

start_hours_range - 這個設定任務開始運作的時間範圍(也就是任務隻在這幾個小時内運作)。

random_delay - 這定義添加到使用者定義的任務延遲的最大随機延遲(預設為 45)。

這是你的 anacrontab 檔案可能看上去的樣子。

anacron – /etc/anacrontab:

# /etc/anacrontab: configuration file for anacron 

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

shell=/bin/sh 

path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

home=/root 

logname=root 

# these replace cron's entries 

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

7       10      cron.weekly     run-parts --report /etc/cron.weekly 

@monthly        15      cron.monthly    run-parts --report /etc/cron.monthly 

@daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh                                                                       

下面是 cron 以及 anacron 的比較,幫助你了解何時用他們其中一個。

cron

anacron

它是守護程序

它不是守護程序

适合伺服器

适合桌面/筆記本電腦

可以讓你以分鐘級運作計劃任務

隻能讓你以天為基礎來運作計劃任務

關機時不會執行計劃任務

如果計劃任務到期,機器是關機的,那麼它會在機器下次開機後執行計劃任務

普通使用者和 root 使用者都可以使用

隻有 root 使用者可以使用(使用特定的配置啟動普通任務)

cron 和 anacron 主要的差別在于 cron 能在那些持續運作的機器上有效地運作,而 anacron 是針對那些會在一天内或者一周内會關機的機器。

如果你還知道其他方式,請在評論欄中與我們分享。

作者:aaron kili

來源:51cto

繼續閱讀