windows提供了計劃任務這一功能,在控制台 -> 效能與維護 -> 任務計劃, 它的功能就是安排自動啟動並執行任務。 通過'新增工作計劃'的一步步引導,則可建立一個定時執行的任務。 在linux同樣具備相同的功能:
第一部分:at命令
1. at命令:在一個指定的時間執行一個指定任務,只能執行一次,且需要開啟atd進程(ps -ef | grep atd查看, 開啟用/etc/init.d/atd start or restart; 開機即啟動則需要運行chkconfig --level 2345 atd on)。
[root @ localhost test]at now +1 minat> echo "hello" > /dev/tty2後斷行符號 # 一分鐘後發送“hello”給tty2終端
--注意: 使用ctrl+d來終結字元輸入(即<EOT>)
at 00:55 2009-12-13at> echo "test at command" > /home/test.txt at 1:00 2009-12-13at>/sbin/shutdown -h now #此處使用絕對路徑
at 命令建立的任務會放在/var/spool/at下面, 是一個指令檔,可以用vi進行編輯。
at now +1 minat> echo "hello" <EOF>#此時會以發送郵件的方式給當前執行的人, 用mail命令可以查看, 即先使用mail命令,出現&後輸入'1'則可查看。
atq指令:查詢當前機器上有哪些等待執行的任務, 其第一列為工作號。atrm指令:取消任務, eg: atrm 10 #其中10為工作號。batch指令:以一個較低優先順序延時執行任務。
batchat> echo "hello" > /home/abc.txt <EOF>
2.at命令的安全控制 /etc/at.allow #列出可以使用at命令的使用者, 先找at.allow檔案,再找at.deny檔案 /etc/at.deny #列出不可以使用at命令的使用者, 一行一個使用者。若既無at.allow檔案,也無at.deny檔案,則只有root使用者才能執行at命令
第二部分:cron服務機制
1、cron服務介紹
cron把命令列儲存在/etc/crontab檔案裡,每個系統使用者如果設定了自己的cron,那都會在/var/spool/cron下面有對應使用者名稱的crontab。無論編寫/var/spool/cron目錄內的檔案還是/etc/crontab檔案,都能讓cron準確無誤地執行安排的任務,區別是/var/spool/cron下各系統使用者的crontab檔案是對應使用者層級的的任務配置,而/var/crontab檔案則是對應系統層級的任務配置。cron伺服器每分鐘讀取一次/var/crontab/cron目錄內的所有檔案和/etc/crontab檔案。
2、使用cron服務執行計畫任務
#service crond start/restart/stop
啟動/重啟/關閉cron服務
#crontab -l
瀏覽目前使用者的crontab,即瀏覽已存在的計劃工作清單
#crontab -e
編輯目前使用者crontab,如之前從未編輯過crontab檔案,那麼crontab是一個空白檔案,我們可以完全手工編寫我們所需要的計劃工作清單,下面詳細介紹計劃工作清單的寫法。
以下是幾個例子:
- 9 9 * * * /usr/local/bin/cvsb
- 3 3 * * 0 /usr/local/bin/qbbak
- * */6 * * * /usr/local/bin/esbbak
- 20,30 * * * /usr/local/bin/esbak
六個欄位對應的含義如下:
9 9 * * *
分鐘 小時 日期 月份 星期
- 表示每天早上9點9分執行目錄/usr/local/bin/中的cvsb檔案
- 表示每周日淩晨3時3分執行目錄/usr/local/bin中的qbbak檔案
- 表示每6小時執行一次,執行時間從第一次執行起計算,當然也可以自訂執行時間,比如0 */6 * * *那程式就會在整點執行
- 表示在每小時20分和30分時執行
上面簡單介紹了cron的一些基本用法,這個東東的時間組合可不是一般的強~可以複雜到你無法想象,我們只要掌握少許基本就可以滿足日常需求了。
3、cron進階使用
(1).避免cron產生垃圾檔案
細心的朋友可能會發現系統/var/spool/clientmqueue/目錄下往往存有大量檔案,原因是系統中有使用者開啟了cron,而cron中執行的程式有輸出內容,輸出內容會以郵件形式發給cron的使用者,而sendmail(系統內建的郵件伺服器)沒有啟動所以就產生了這些檔案。
這時可以使用輸出重新導向,即在計劃任務後加上> /dev/null 2>&1
例:
- 9 9 * * * /usr/local/bin/cvsb > /dev/null 2>&1
(2>&1:把錯誤重新導向到輸出要送到的地方。)
把命令的執行結果重新導向到/dev/null,即把產生的錯誤拋棄。
(2).一種經常碰到的情況,需要執行的檔案沒問題,但通過cron就是死活不能正確執行,這時我們可以通過輸出重新導向將cron的執行過程輸出到一個檔案,通過分析執行過程來尋找錯誤的原因
例:
- 9 9 * * * /usr/local/bin/cvsb > /var/log/crontab_log 2>&1
上例將cron的執行過程輸出到一個文字檔crontab_log,這個檔案可以隨便手動建一個,放在哪都行,重新導向目錄寫對就Ok