1. 程式人生 > >at、crontab、anacron的基本使用

at、crontab、anacron的基本使用

root用戶 命令操作 設置 日誌清理 ash 整數 bash 等待時間 nth

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-unitsnow就是當前時間,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的基本使用