at、crontab、anacron的基本使用
Linux的任務調度機制主要分為兩種:
1. 執行一次:將在某個特定的時間執行的任務調度 at
2. 執行多次: crontab
3.關機後恢復尚未執行的程序 anacron、
①at
at命令用於在指定時間執行命令。at允許使用一套相當復雜的指定時間的方法。它能夠接受在當天的hh:mm(小時:分鐘)式的時間指定。假如該時間已過去,那麽就放在第二天執行。當然也能夠使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的 詞語來指定時間。用戶還能夠采用12小時計時制,即在時間後面加上AM(上午)或PM(下午)來說明是上午還是下午。 也能夠指定命令執行的具體日期,指定格式為month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必須跟在指定時間的後面。
上面介紹的都是絕對計時法,其實還能夠使用相對計時法,這對於安排不久就要執行的命令是很有好處的。指定格式為:now + count time-units
,now就是當前時間,time-units是時間單位,這裏能夠是minutes(分鐘)、hours(小時)、days(天)、weeks(星期)。count是時間的數量,究竟是幾天,還是幾小時,等等。 更有一種計時方法就是直接使用today(今天)、tomorrow(明天)來指定完成命令的時間。
at(選項)(參數)
-f:指定包含具體指令的任務文件; -q:指定新任務的隊列名稱; -l:顯示待執行任務的列表; -d:刪除指定的待執行任務; -m:任務執行完成後向用戶發送E-mail。
例,
三天後的下午 5 點鍾執行/bin/ls
:
[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at> <EOT>
job 7 at 2013-01-08 17:00
②crontab
crontab命令被用來提交和管理用戶的需要周期性執行的任務,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
crontab(選項)(參數)
-e:編輯該用戶的計時器設置; -l:列出該用戶的計時器設置; -r:刪除該用戶的計時器設置; -u<用戶名稱>:指定要設定計時器的用戶名稱。
Linux下的任務調度分為兩類:系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日誌清理等。在/etc
目錄下有一個crontab文件,這個就是系統任務調度的配置文件。
/etc/crontab
文件包括下面幾行:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=""HOME=/ # run-parts 51 * * * * root run-parts /etc/cron.hourly 24 7 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪個shell,這裏是bash,第二行PATH變量指定了系統執行命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將通過電子郵件發送給root用戶,如果MAILTO變量的值為空,則表示不發送任務執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。
crontab文件的含義:用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段,格式如下:
minute hour day month week command 順序:分 時 日 月 周
其中:
- minute: 表示分鐘,可以是從0到59之間的任何整數。
- hour:表示小時,可以是從0到23之間的任何整數。
- day:表示日期,可以是從1到31之間的任何整數。
- month:表示月份,可以是從1到12之間的任何整數。
- week:表示星期幾,可以是從0到7之間的任何整數,這裏的0或7代表星期日。
- command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。
在以上各個字段中,還可以使用以下特殊字符:
- 星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。
- 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整數之間的中杠表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
- 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
③anacron
anacron並不能取代cron去運行某項任務,而是以天為單位或者是在啟動後立刻進行anacron的動作,它會去偵測停機期間應該進行但是並沒有進行的crontab任務,並將該任務運行一遍後,anacron就會自動停止了。
anacron命令的語法如下:
(1)-s開始連續的運行各項工作,會一句時間記錄當的數據判斷是否進行。
(2)-f強制進行,而不去判斷時間登錄檔的時間戳。
(3)-n立即進行未進行的任務,而不延遲等待時間。
(4)-u僅升級時間記錄當的時間戳,不進行任何工作。
而anacron的配置文件是/etc/anacrontab,而它的很多內容則是在/var/spool/anacron裏面保存。
當anacron下達anacron -s cron.daily時,它會有如下的步驟:
(1)由/etc/anacrontab分析到cron.daily這項工作名稱的天數為一天。
(2)由/var/spool/anacron/cron.daily取出最近一次運行anacron的時間戳。
(3)把取出的時間戳與當前的時間戳相比較,如果差異超過了一天,那麽就準備進行命令。
(4)若準備進行命令,根據/etc/anacrontab的配置,將延遲65分鐘。
(5)延遲時間後,開始運行後續命令,也就是run-parts /etc/cron.daily這串命令。
(6)運行完畢後,anacron程序結束。
at、crontab、anacron的基本使用