国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux anacron命令用法詳解

2024-08-27 23:56:37
字體:
來源:轉載
供稿:網友
anacron 是用來做什么的呢?設想這樣一個場景,linux 服務器會在周末關機兩天,但是設定的定時任務大多在周日早上進行,但在這個時間點,服務器又處于關機狀態,導致系統很多定時任務無法運行。

又比如,我們需要在凌晨 5 點 05 分執行系統的日志備份,但 Linux 服務器不是 24 小時開機的,在晚上需要關機,白天上班之后才會再次開機,在這個定時任務的執行時間我們的服務器剛好沒有開機,那么這個定時任務就不會執行了。anacron 就是用來解決這個問題的。

anacron 會以 1 天、1周(7天)、一個月作為檢測周期,判斷是否有定時任務在關機之后沒有執行。如果有這樣的任務,那么 anacron 會在特定的時間重新執行這些定時任務。

那么,anacron 是如何判斷這些定時任務已經超過執行時間的呢?這就需要借助 anacron 讀取的時間記錄文件。anacron 會分析現在的時間與時間記錄文件所記載的上次執行 anacron 的時間,將兩者進行比較,如果兩個時間的差值超過 anacron 的指定時間差值(一般是 1 天、7 天和一個月),就說明有定時任務沒有執行,這時 anacron 會介入并執行這個漏掉的定時任務,從而保證在關機時沒有執行的定時任務不會被漏掉。

在 CentOS 6.x 中,使用 cronie-anacron 軟件包取代了 vixie-cron 軟件包。而且在原先 CentOS 版本的 /etc/cron.{daily,weekly,monthly} 目錄中的定時任務會同時被 cron 和 anacron 調用,這樣非常容易出現重復執行同一個定時任務的錯誤。因此,在 CentOS 6.x 中,/etc/cron.{daily,weekly,monthly} 目錄中的定時任務只會被 anacron 調用,從而保證這些定時任務只會在每天、每周或每月定時執行一次,而不會重復執行。

不僅如此,在 CentOS 6.x 中,anacron 還有一個變化,那就是 anacron 不再是單獨的服務,而變成了系統命令。也就是說,我們不再使用“service anacron restart”命令來管理 anacron 服務了,而需要使用 anacron 命令來管理 anacron 工作。

anacron命令的基本格式如下:

[root@localhost ~]# anacron [選項] [工作名]

這里的工作名指的是依據 /etc/anacrontab 文件中定義的工作名。表 1 羅列出了此命令常用的幾個選項及各自的功能。

表 1 anacron命令常用選項及功能
選項功能
-f強制執行相關工作,忽略時間戳。
-u更新 /var/spool/anacron/cron.{daily,weekly,monthly} 文件中的時間戳為當前日期,但不執行任何工作。
-s依據 /etc/anacrontab 文件中設定的延遲時間順序執行工作,在前一個工作未完成前,不會開始下一個工作。
-n立即執行 /etc/anacrontab 中所有的工作,忽略所有的延遲時間。
-q禁止將信息輸出到標準錯誤,常和 -d 選項合用。

在當前的 Linux 中,其實不需要執行任何 anacron 命令,只需要配置好 /etc/anacrontab 文件,系統就會依賴這個文件中的設定來通過 anacron 執行定時任務了。那么,關鍵就是 /etc/anacrontab 文件的內容了。這個文件的內容如下:

[root@localhost ~]# vi /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
#前面的內容和/etc/crontab類似
#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_H0URS_RANGE=3-22
#fanacron的執行時間范圍是3:00~22:00
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
#每天開機 5 分鐘后就檢查 /etc/cron.daily 目錄內的文件是否被執行,如果今天沒有被執行,那就執行
7 25 cron.weekly nice run-parts /etc/cron.weekly
#每隔 7 天開機后 25 分鐘檢查 /etc/cron.weekly 目錄內的文件是否被執行,如果一周內沒有被執行,就會執行
©monthly 45 cron.monthly nice run-parts /etc/cron.monthly
#每隔一個月開機后 45 分鐘檢查 /etc/cron.monthly 目錄內的文件是否被執行,如果一個月內沒有被執行,那就執行 

在這個文件中,“RANDOM_DELAY”定義的是最大隨機延遲,也就是說,cron.daily 工作如果超過 1 天沒有執行,則并不會馬上執行,而是先延遲強制延遲時間,再延遲隨機延遲時間,之后再執行命令;“START_HOURS_RANGE”的是定義 anacron 執行時間范圍,anacron 只會在這個時間范圍內執行。

我們用 cron.daily 工作來說明一下 /etc/anacrontab 的執行過程:
  1. 讀取 /var/spool/anacron/cron.daily 文件中 anacron 上一次執行的時間。
  2. 和當前時間比較,如果兩個時間的差值超過 1 天,就執行 cron.daily 工作。
  3. 只能在 03:00-22:00 執行這個工作。
  4. 執行工作時強制延遲時間為 5 分鐘,再隨機延遲 0~45 分鐘。
  5. 使用 nice 命令指定默認優先級,使用 run-parts 腳本執行 /etc/cron.daily 目錄中所有的可執行文件。

大家會發現,/etc/cron.{daily,weekly,monthly} 目錄中的腳本在當前的 Linux 中是被 anacron 調用的,不再依靠 cron 服務。不過,anacron 不用設置多余的配置,我們只需要把需要定時執行的腳本放入 /etc/cron.{daily,weekly,monthly} 目錄中,就會每天、每周或每月執行,而且也不再需要啟動 anacron 服務了。如果需要進行修改,則只需修改 /etc/anacrontab 配置文件即可。

比如,我更加習慣讓定時任務在凌晨 03:00-05:00 執行,就可以進行如下修改:

[root@localhost ~] # vi /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=0
#把最大隨機廷遲改為0分鐘,不再隨機廷遲
# the jobs will be started during the following hours only START_HOORS_RANGE=3-5
#執行時間范圍為03:00—05:00
#period in days delay in minutes job-identifier command
1 0 cron.daily nice run-parts /etc/cron.daily
7 0 cron.weekly nice run-parts /etc/cron.weekly
@monthly 0 cron.monthly nice run-parts /etc/cron.monthly
#把強制延遲也改為0分鐘,不再強制廷遲

這樣,所有放入 /etc/cron.{daily,weekly,monthly} 目錄中的腳本都會在指定時間執行,而且也不怕服務器萬一關機的情況了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福泉市| 清徐县| 万州区| 子长县| 县级市| 耿马| 长寿区| 杭锦后旗| 海口市| 渭南市| 姚安县| 碌曲县| 佛坪县| 盐城市| 南皮县| 瓮安县| 太仆寺旗| 凯里市| 平乡县| 龙州县| 阳原县| 南岸区| 若羌县| 永新县| 望都县| 太仓市| 万盛区| 彝良县| 游戏| 柳河县| 疏勒县| 拉萨市| 涪陵区| 钟山县| 正安县| 南充市| 庆安县| 于田县| 华容县| 喀喇沁旗| 玛曲县|