工作排程種類
at 是個可以處理僅執行一次就結束排程的指令,不過要執行 at 時, 必須要有 atd 這個服務
crontab 設定的工作將會循環的一直進行!循環的時間為分、小時、每週、每月或每年等。crontab 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支援。讓crontab可以啟動則是 crond 這個服務!
限制使用 crontab
/etc/cron.allow:不在這個檔案內的使用者則不可使用 crontab;
/etc/cron.deny: 將不可以使用 crontab 的帳號寫入其中
/etc/cron.allow 比 /etc/cron.deny 要優先,建議只要保留一個即可,系統預設是保留 /etc/cron.deny ,一個帳號一行!
工作排程紀錄
工作排程會被紀錄到 /var/spool/cron/ 而且以帳號來作為判別,不要使用 vi 直接編輯該檔案,
cron 執行的每一項工作都會被紀錄到 /var/log/cron 這個登錄檔中
語法
crontab [-u username] [-l|-e|-r]
選項與參數:
-u :幫其他使用者建立/移除 crontab 工作排程;
-e :編輯 crontab 的工作內容
-l :查閱 crontab 的工作內容
-r :移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯。
範例一:在每天的 12:00 發信給自己
crontab -e
# 此時會進入 vi 編輯工作!每項工作都是一行。
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
#分 時 日 月 週 |<==============指令串========================>|
週的數字為 0 或 7 時都代表『星期天』
*(星號) 代表任何時刻都接受的意思!
,(逗號) 代表分隔時段的意思。如工作時間是3點與6點時,就會是:0 3,6 * * * command
-(減號) 代表一段時間範圍內。8到12點的每小時20分都做一項工作:20 8-12 * * * command
/n(斜線) n代表數字,是每隔 n 單位間隔的意思,如每五分鐘一次,則:*/5 * * * * command
用 * 與 /5 來搭配,也可以寫成 0-59/5,相同意思!
系統的設定檔: /etc/crontab
『 crontab -e 』是針對使用者的 cron 來設計的,
『系統的例行性任務』,要編輯 /etc/crontab 這個檔案
crontab -e 這個 crontab 其實是 /usr/bin/crontab 這個執行檔
/etc/crontab 可是一個『純文字檔』喔!你可以 root 的身份編輯一下這個檔案哩!
cron 會每分鐘去讀取一次 /etc/crontab 與 /var/spool/cron
//------------------內容
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
//---------------------------------------------------------
說明:01 * * * * root run-parts /etc/cron.hourly:
以 root 的身份來進行的。
/usr/bin/run-parts 會將後面『目錄』內的所有檔案捉出來執行
下達『 ll /etc/cron.daily 』就可以看到一堆檔案, 那些檔案就是系統提供的 script
注意事項
資源分配不均
如果每個流程都在同一個時間啟動,那麼在某個時段,系統會變的相當繁忙,可以如此設定:
vi /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4
,前後不要有空白
取消不要的輸出項目
如:DNS上層主機掛掉,就會一直收到錯誤訊息,可以『命令重導向』將輸出的結果輸出到 /dev/null
週與日月不可同時並存
沒有留言:
張貼留言