人類把時間做了切割,想象一條筆直的線永遠向前,本來這條直線上什么都沒有,但是人類根據時間的長短(單位)在這條直線上做了密密麻麻的標記(世紀-年-月-日-時-分-秒-納秒......),通過這樣的方式歷史上的每一個時刻都能夠被單獨拿出來,而未來的每一個時刻也能被單獨計劃。更重要的是,每一個單獨的時刻又能跟相鄰的被更大單位所控制的相似時刻做比較,比如,今天的晚上12點跟明天的晚上12點,相似的是,兩個時刻都是12點,不同的是今天跟明天,她們是相鄰的更大單位。因為這樣的緣故,在被更大單位所隔開的每一個相同時刻,我們可以告訴計算機重復某個任務。
在linux下,如果想要在未來的某個時刻執行某個任務,并且在未來的每一個這樣的時刻里都要執行這個任務,舉個簡單的例子,比如說想要在將來,每天的十二點都重啟路由器,大多數發行版都自帶一個守護進程(daemon)cron來完成這項工作。
1.cron,crontab以及anacron的關系
cron是大多數linux發行版都自帶的守護進程(daemon),用來重復運行某些被設定好了確定的運行時間的任務,這些任務可以是每個月運行、每周運行、每天運行,甚至是每一分鐘運行。用cron執行的任務適合于24小時運行的機器,cron執行的任務會在設定好的時刻執行,當機器處于關機狀態下并錯過了任務執行的時間,cron任務就無法預期執行了。
crontab(cron table的簡稱)既可以指cron用來定期執行特定任務所需要的列表文件,又可以指用來創建、刪除、查看當前用戶(或者指定用戶)的crontab文件的命令。
anacron不是守護進程,可以看做是cron守護進程的某種補充程序,anacron是獨立的linux程序,被cron守護進程或者其他開機腳本啟動運行,可以每天、每周、每個月周期性地執行一項任務(最小單位為天)。適合于可能經常會關機的機器,當機器重新開機anacron程序啟動之后,anacron會檢查anacron任務是否在合適的周期執行了,如果未執行則在anacron設定好的延遲時間之后只執行一次任務,而不管任務錯過了幾次周期。舉個例子,比如你設定了一個每周備份文件的任務,但是你的電腦因為你外出度假而處于關機狀態四周,當你回到家中開機后,anacron會在延遲一定時間之后只備份一次文件。由于發行版的不同,cron守護進程如何運行anacron會有所不同。
2.crontab命令,crontab文件語法
系統默認crontab文件為/etc/crontab,以及/etc/cron.d/目錄下的文件,有些程序會把自己的crontab文件放在/etc/cron.d/目錄下。要修改/etc/crontab以及/etc/cron.d/目錄下的文件需要root權限。cron守護進程會檢查/etc/crontab以及/etc/cron.d/目錄下的文件,根據這些文件中的cron任務所設置的執行時間決定是否執行任務,如果當前時間與cron任務所設置的執行時間相同,則執行任務。
每個用戶自己的crontab文件都會被放在 /var/spool/cron目錄下,默認為空,可以使用crontab命令創建。cron守護進程會檢查/var/spool/cron目錄下的文件,根據這些文件中的cron任務所設置的執行時間決定是否執行任務,如果當前時間與cron任務所設置的執行時間相同,則執行任務。
當cron的配置文件發生改變時,不需要重置cron守護進程。cron守護進程會檢查配置文件的變化。
創建自己的crontab之前,首先要設置環境變量EDITOR,cron進程根據它來確定使用哪個編輯器編輯crontab文件。在home目錄下的.bashrc或者.profile里加入一行
#你也可以使用自己喜愛的其他終端編輯器EDITOR=vim; export EDITOR
2.1.crontab命令參數及使用示例
usage: crontab [-u user] file crontab [ -u user ] [ -i ] { -e | -l | -r } -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab)
新聞熱點
疑難解答