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 是針對那些會在一天內或者一周內會關機的機器。
如果你還知道其他方式,請在評論欄中與我們分享。
(題圖:Pixabay,CC0)
作者簡介:
Aaron Kili 是一個 Linux 和 F.O.S.S 愛好者、Linux 系統管理員、網路開發人員,現在也是 TecMint 的內容創作者,他喜歡和電腦一起工作,堅信共享知識。
via: https://www.tecmint.com/cron-vs-anacron-schedule-jobs-using-anacron-on-linux/
作者:Aaron Kili 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive