anacron命令

一當前PC 環境:
Linux ubuntu 3.16.0-59-generic #79~14.04.1-Ubuntu SMP Mon Jan 18 15:41:27 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

useful link:
http://manpages.ubuntu.com/manpages/wily/man8/anacron.8.html
http://blog.csdn.net/smasegain/article/details/50569486
http://www.thegeekstuff.com/2011/05/anacron-examples/

二作用:
anacron 並不是用來取代 crontab 的,anacron 用於不能全天候開機的電腦,替代完成 cron 命令的守護進程。由於常規的計劃任務通常被安排在午夜執行,如果計算機當時沒有開機就不會運行這些任務。然而如果是使用anacron, 就可以確保你在下次開啓電腦的時候, 任務被執行. anacron 的目的就在於運行這些計劃任務,並考慮計算機關機時間。

三特性:
1: 配置文件

$ cat /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
##### period  delay   job-identifier    command
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

上面的格式是 period delay job-identifier command
period: 這是任務的週期,以天來指定,或者是 @daily、@weekly、@monthly 代表每天、每週、每月一次。你也可以使用數字:1 - 每天、7 - 每週、30 - 每月,或者 N – 幾天。這裏的時間不會按照我們日曆上的周/月來算,而只是輪迴循環的天數.

delay: 這是在執行一個任務前等待的分鐘數. 還有在時間間隔period到期後,如果任務沒有順利執行,則會等待此處設置的時間,然後再次嘗試執行。

job-identifier: 這是寫在日誌文件中任務的獨特名字。

ls /var/spool/anacron/
cron.daily  cron.monthly  cron.weekly

用於存放anacron的時間戳文件. anacron每次啓動時就會在/var/spool/anacron/
下面建立一個以 job-identifier爲文件名的時間戳文件, 裏面記錄的是上一次任務完成的時間.

cat /var/spool/anacron/cron.daily   
20171127

command: 這是要執行的命令或 shell 腳本。
請注意 anacron 會在啓動機器之後,頻頻執行此類活動,有可能導致計算機反應遲緩。這也正是/etc/anacrontab 文件中的任務有時候會以 nice 命令開頭,這樣可以減小它們執行優先級進而限制它們對系統的影響。可以對比下/etc/anacrontab和 /etc/crontab文件格式的不同.

2: 運行過程

舉例anacron執行cron.daily的步驟
1: 啓動了anacron執行到/etc/anacrontab中的cron.daily
(系統重新啓動或者anacron程序啓動sudo /etc/init.d/anacron start|stop|restart|force-reload|reload)
2: 查看/var/spool/anacron/cron.daily中的時間戳文件內容,
3: 取出時間戳的標記時間和當前時間對比, 如果相差超過period即1天就準備執行命令
4: 任務處於ready狀態之後, 等待delay規定的時間之後就立刻執行
5: 達到執行條件的任務都完成之後anacron程序就會自動退出.
(anacron 以串行方式調用,在 /etc/init.d 的腳本中加了一個 -s 參數,便是指在前一個任務沒有完成時不執行下一個任務, sudo vim /etc/init.d/anacron)

四添加自己的任務:
方法一:
在/etc/cron.daily
或者cron.monthly或者 cron.weekly下面添加cron腳本.
方法二:
直接寫入 /etc/anacrontab.

五anacron與crontab 對比: :

crontab anacron
適合服務器 適合桌面/筆記本電腦
它是守護進程 它不是守護進程
關機時不會執行計劃任務 如果計劃任務到期,機器是關機的,那麼它會在機器下次開機後執行計劃任務
可以讓你以分鐘級運行計劃任務 只能讓你以天爲基礎來運行計劃任務
普通用戶和 root 用戶都可以使用 只有 root 用戶可以使用(使用特定的配置啓動普通任務)

六anacron語法命令:
anacron [-s] [-f] [-n] [-d] [-q] [-t anacrontab] [-S spooldir] [job]
anacron [-S spooldir] -u [-t anacrontab] [job]
anacron [-V|-h]
anacron -T [-t anacrontab]
-f: 表示強制調用,忽略本來的週期;
-u: 僅更新timestamp文件而不真正調用job,可以用來調整anacron的執行週期;
-s: 串行調用任務,從1.1的(4)可以看到默認就是串行調用,不指定此參數則到時間就直接執行(不便於設置依賴關係);
-n: 跳過delay直接執行,隱含調用了-s的參數;
-d: 不將任務在後臺調度,信息會輸出到前臺,方便調試;
-q: 不顯示報錯信息到標準輸出,可以與-d一起使用;
-t anacron table:指定默認anacrontab以外的其他配置文件;
-T: Anacrontab檢驗,如果語法有誤則返回1,無誤返回0;
-S spooldir:指定存放timestamp文件的路徑,This option is required for users who wish to run anacron themselves;
-V: 顯示版本信息後退出;
-h: 顯示簡單的幫助信息後退出

七我的疑問:
1: anacron 在完成所有任務之後自動退出了,如果不關機或者重新啓動 anacron 服務,那麼/etc/anacrontab中的任務如何啓動?
意思是除了以上兩種情況, /etc/anacrontab中的任務就不需要執行了還是說anacron本身存在某種隔固定時間會自己啓動一次?

2: 如果pc上面同時存在crontab和anacron的引用, 那麼根據命令的特性, 他們都會調用/etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, 和 /etc/cron.monthly/中的腳本. 系統是如何處理這之間的矛盾和衝突的?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章