介紹:
所謂「例行性工作」,是指讓系統在指定時間自動執行的工作。依其性質分為「一次性工作」與「循環性工作」。顧名思義,一次性工作於指定時間執行之後便不會再執行,而循環性工程會因指定的時間間隔或是時間點來重複執行。
在Linux中,系統本就有內建一些例行性工作,例如登錄檔的分析、暫存檔的管理、系統資料庫的更新…等等。尤其若有在系統中架設伺服器,那麼例行的連線管理與分析更是不可或缺的。
- 一次性工作
欲設定一次性工作,必須先開啟atd這個daemon(關於daemon,請看其他章節)。有些系統預設開啟atd,有些則預設不開啟。要手動開啟atd,即是輸入命令:
/etc/init.d/atd restart
即可開啟atd。但即使是這樣,在登出後仍會將atd關閉。要使系統在每次登入時都自動開啟atd,可輸入命令:chkconfig atd on
1. 利用at命令,來管理一次性工作:
(1) at -l:以清單的方式,列出目前所有尚未執行的一次性工作(命令:atq,也可以達到同樣的效果)。使用者只能看到自己安排的一次性工作,不過若是root,可以看到所有使用者安排的一次性工作。顯示的格式為:
工作編號 工作預定執行的時間 a 執行工作的使用者名稱
其中,工作編號是一個正整數,每一個工作都有屬於自己的工作編號。
(2) at -c 工作編號:顯示擁有該工作編號之工作的「詳細資訊」,包括欲執行此工作者的UID、GID,以及該工作實際上的命令內容…等。
(3) at 選項 時間:建立一次性工作的排程,即是在指定的時間到達時,執行指定的工作。
※ 此命令在輸入之後,會產生子程序並出現指令輸入列,在指令輸入列輸入的指令,也就是一次性工作實際上的「工作內容」。若要終止輸入,可按<ctrl>+<d>。(用ubuntu測試時,一次性工作被建立後,會被放置在/var/spool/cron/atjobs目錄中。)
※ 若「工作內容」在執行時,有產生標準輸出或標準錯誤輸出,並不會在螢幕上顯示出來(為了怕打擾到使用者),而是會用寄信的方式把輸出給寄到使用者的信箱。
※ 選項,可以不寫,也可以是-m。如果寫了-m,那麼就算工作內容中沒有標準輸出,系統也會寄信給使用者,告知使用者工作完成。
※ 時間的寫法可以是:
(※-1) HH:MM:表示在當天的HH時、MM分時,執行工作。其中,HH的值從00~23,MM的值從00~59。
(※-2) HH:MM yyyy-mm-dd:表示在西元yyyy年mm月dd日的HH時、MM分時,執行工作。其中,mm的值從01~12,dd的值從00~31。
(※-3) now+ N單位:單位可以是minutes(分),hours(時),days(日)。N則是正整數。表示在輸入at 選項 時間的當下過了N單位時間之後再執行命令,如:
at now+5minutes 表示在輸入此指令的當下過了五分鐘之後再執行命令。要注意,這個now,是代表at 選項 時間 這一行指令輸入的時間,卻不是「工作內容」輸入後、按下<ctrl>+<d>的時間。如果在輸入工作內容時,超過了指定的時間,那麼在按下<ctrl>+<d>時工作內容就會自動執行完成。
還要注意的是,時間的指定,其最小單位是「分鐘」,也就是說,秒數會被忽略。若用at now+Nminutes(N是正整數)這種方法來指定時間,不會真正等到N分後才執行工作。例如,假設now代表的時間是13時33分22秒,而at now+Nminutes指定的時間就會是13時33+N分00秒!秒數被忽略了!
※ 要注意,不管在指定執行時間到達時使用者位在哪個目錄,執行「工作內容」,都是在輸入at 選項 時間這個指令時的目錄下執行。
(4) at -d 工作編號:取消擁有該工作編號之工作,令其不要執行。命令:atrm 工作編號,也可以達到同樣的效果。
(5)系統對於at的使用有加以限制。有些使用者被允許利用at來管理一次性工作,而有些使用者可能因為某些行為表現不佳,而被禁用at。身為root可以用「白名單法」或「黑名單法」來賦予使用者使用at的權限。
(5-1) 白名單法:在/etc/at.allow這個檔案下,輸入使用者帳號。只有這些使用者能使用at命令。
(5-2) 黑名單法:在/etc/at.deny這個檔案下,輸入使用者帳號。只有這些使用者不能使用at命令。
通常,這兩個方法不會同時使用。比較常見的是只用黑名單法,也就是只使用/etc/at.deny這個檔案。
2. 用batch指令安排一次性工作:
batch 選項 時間
其中,選項和時間的寫法與1.之(3)的 at 選項 時間相同。這個指令也是在安排一次性工作,不過是在系統的CPU負載小於一定數值時才會執行工作內容(這個數值通常是0.8)。以免系統過分忙碌造成錯誤。
利用batch指令安排的工作,同樣可用at指令來檢視與管理。
留言列表