1. 程式人生 > >鳥哥的Linux私房菜讀書筆記--迴圈執行的例行性工作排程

鳥哥的Linux私房菜讀書筆記--迴圈執行的例行性工作排程

迴圈執行的例行性工作排程是由cron(crond)系統服務來進行控制的,預設啟動

1、使用者的設定

使用者建立迴圈型工作排程使用的是cronta指令,為了安全性的問題,與at同樣的,我們可以限制使用crontab的使用者賬號,使用的限制資料有:

(1)/etc/cron.allow

將可以使用crontab的賬號寫入其中,若不在這個檔案內的使用者則不可使用crontab

(2)/etc/cron.deny

將不可以使用crontab的賬號寫入其中,若未記錄到該檔案中的使用者,就可以使用crontab

當用戶使用crontab指令來建立工作排程後,該項公作就會被記錄到/var/spool/cron中,而且是以賬號作為判別

[[email protected] ~]# crontab [-u username] [-l|-e|-r] 選項與引數: -u :只有 root 才能進行這個任務,亦即幫其他使用者建立/移除 crontab 工作排程; -e :編輯 crontab 的工作內容 -l :查閱 crontab 的工作內容 -r :移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯。 範例一:用 dmtsai 的身份在每天的 12:00 發信給自己 [[email protected] ~]$ crontab -e # 此時會進入 vi 的編輯畫面讓您編輯工作!注意到,每項工作都是一行。                0     12     *    *     *       mail -s "at 12:00" dmtsai < /home/dmtsai/.bashrc          #   分     時   日   月   周     |<==============指令串========================>|

2、系統的配置檔案:/etc/crontab,/etc/cron.d

指令:crontab -e(/usr/bin/crontab)是針對使用者的cron來設計的,如果是系統的例行性人物,只需要編輯/etc/crontab檔案。cron服務的最低偵測限制是分鐘,所以cron每分鐘去讀取一次/etc/crontab與/var/spool/crontab裡面的資料內容

o MAILTO=root: 這個專案是說,當 /etc/crontab 這個檔案中的例行性工作的指令發生錯誤時,或者是該工作的執行結有 STDOUT/STDERR 時,會將錯誤訊息或者是螢幕顯示的訊息傳給誰?預設當然是由系統直接寄發一封 mail 給 root 啦!不過, 由於 root 並無法在客戶端中以 POP3 之類的軟體收信,因此,鳥哥通常都將這個 e-mail 改成自己的賬號,好讓我隨時瞭解系統的狀況!例如:

[email protected] o PATH=....:還記得我們在第十章的 BASH 當中一直提到的執行檔案路徑問題吧! 沒錯啦!這裡就是輸入執 行檔案的搜尋路徑!使用預設的路徑設定就已經很足夠了! o 『分 時 日 月 周 身份 指令』七個欄位的設定這個 /etc/crontab 裡面可以設定的基本語法與 crontab -e 不太相同喔!前面同樣是分、時、日、月、週五個欄位, 但是在五個欄位後面接的並不是指令,而是一個新的欄位,那就是『執行後面那串指令的身份』為何!這與使用者的 crontab -e 不相同。由於使用者自己的 crontab 並不需要指定身份,但 /etc/crontab 裡面當然要指定身份啦!以上表的內容來說,系統預設的例行性工作是以 root 的身份來進行的。

<1>crond 服務讀取配置檔案的位置 一般來說,crond 預設有三個地方會有執行指令碼配置檔案,他們分別是: · /etc/crontab · /etc/cron.d/* · /var/spool/cron/* 這三個地方中,跟系統的運作比較有關係的兩個配置檔案是放在 /etc/crontab 檔案內以及/etc/cron.d/* 目錄內的檔案, 另外一個是跟使用者自己的工作比較有關的配置檔案,就是放在/var/spool/cron/ 裡面的檔案群。 

總結:

· 個人化的行為使用『 crontab -e 』:如果你是依據個人需求來建立的例行工作排程,建議直接使用 crontab -e 來建立你的工作排程較佳! 這樣也能保障你的指令行為不會被大家看到 (/etc/crontab 是大家都能讀取的許可權喔!); · 系統維護管理使用『 vim /etc/crontab 』:如果你這個例行工作排程是系統的重要工作,為了讓自己管理方便,同時容易追蹤,建議直接寫入 /etc/crontab 較佳! · 自己開發軟體使用『 vim /etc/cron.d/newfile 』:如果你是想要自己開發軟體,那當然最好就是使用全新的配置檔案,並且放置於 /etc/cron.d/ 目錄內即可。 · 固定每小時、每日、每週、每天執行的特別工作:如果與系統維護有關,還是建議放置到 /etc/crontab 中來集中管理較好。 如果想要偷懶,或者是一定要再某個週期內進行的任務,也可以放置到上面談到的幾個目錄中,直接寫入指令即可!

3、一些注意事項 有的時候,我們以系統的 cron 來進行例行性工作的建立時,要注意一些使用方面的特性。 舉例來說,如果我們有四個工作都是五分鐘要進行一次的,那麼是否這四個動作全部都在同一個時間點進行?如果同時進行,該四個動作又很耗系統資源,如此一來,每五分鐘的某個時刻不是會讓系統忙得要死?呵呵!此時好好的分配一些執行時間就 OK 啦!所以,注意一下: (1)資源分配不均的問題 當大量使用 crontab 的時候,總是會有問題發生的,最嚴重的問題就是『系統資源分配不均』的問題, 以鳥哥的系統為例,我有偵測主機流量的資訊,包括: · 流量 · 區域內其他 PC 的流量偵測 · CPU 使用率 · RAM 使用率 · 線上人數實時偵測 如果每個流程都在同一個時間啟動的話,那麼在某個時段時,我的系統會變的相當的繁忙,所以,這 個時候就必須要分別設定啦!我可以這樣做: [[email protected] ~]# vim /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 看到了沒?那個『 , 』分隔的時候,請注意,不要有空格符!(連續的意思)如此一來, 則可以將每五分鐘工作的流程分別在不同的時刻來工作!則可以讓系統的執行較為順暢呦! (2) 取消不要的輸出專案 另外一個困擾發生在『 當有執行成果或者是執行的專案中有輸出的資料時,該資料將會 mail 給MAILTO 設定的賬號 』,好啦,那麼當有一個排程一直出錯(例如 DNS 的偵測系統當中,若 DNS 上層主機掛掉,那麼你就會一直收到錯誤訊息!)怎麼辦?呵呵!還記得第十章談到的資料流重導向吧? 直接以『資料流重導向』將輸出的結果輸出到 /dev/null 這個垃圾桶當中就好了! (3)安全的檢驗很多時候被植入木馬都是以例行命令的方式植入的,所以可以藉由檢查 /var/log/cron 的內容來視察是否有『非您設定的 cron 被執行了?』這個時候就需要小心一點囉! (4) 周與日月不可同時並存 另一個需要注意的地方在於:『你可以分別以周或者是日月為單位作為迴圈,但你不可使用「幾月幾號且為星期幾」的模式工作』。 這個意思是說,你不可以這樣編寫一個工作排程:30 12 11 9 5 root echo "just test" <==這是錯誤的寫法本來你以為九月十一號且為星期五才會進行這項工作,無奈的是,系統可能會判定每個星期五作一次,或每年的 9 月 11 號分別進行,如此一來與你當初的規劃就不一樣了~所以囉,得要注意這個地方!