相對于 at 是僅執行一次的工作,循環執行的例行性工作調度則是由 cron (crond) 這個系統服務來控制的。剛剛談過 Linux 系統上面原本就有非常多的例行性工作,因此這個系統服務是默認啟動的。另外, 由于使用者自己也可以進行例行性工作調度,所以, Linux 也提供使用者控制例行性工作調度的指令 (crontab)。
15.3.1 使用者的設置
使用者想要創建循環型工作調度時,使用的是 crontab 這個指令。不過,為了安全性的問題, 與 at 同樣的,我們可以限制使用 crontab 的使用者帳號。使用的限制數據有:
/etc/cron.allow: 將可以使用 crontab 的帳號寫入其中,若不在這個文件內的使用者則不可使用 crontab;
/etc/cron.deny: 將不可以使用 crontab 的帳號寫入其中,若未記錄到這個文件當中的使用者,就可以使用 crontab 。
與 at 很像吧!同樣的,以優先順序來說, /etc/cron.allow 比 /etc/cron.deny 要優先, 而判斷上面,這兩個文件只選擇一個來限制而已,因此,建議你只要保留一個即可, 免得影響自己在設置上面的判斷!一般來說,系統默認是保留 /etc/cron.deny , 你可以將不想讓他執行crontab 的那個使用者寫入 /etc/cron.deny 當中,一個帳號一行。
當使用者使用 crontab 這個指令來創建工作調度之后,該項工作就會被紀錄到/var/spool/cron/ 里面去了,而且是以帳號來作為判別的。舉例來說, dmtsai 使用 crontab后, 他的工作會被紀錄到 /var/spool/cron/dmtsai 里頭去!但請注意,不要使用 vi 直接編輯該文件, 因為可能由于輸入語法錯誤,會導致無法執行 cron 。另外, cron 執行的每一項工作都會被紀錄到 /var/log/cron 這個登錄文件中,所以,如果你的 Linux 不知道有否被植入木馬時,也可以搜尋一下 /var/log/cron 這個登錄文件。
默認情況下,任何使用者只要不被列入 /etc/cron.deny 當中,那么他就可以直接下達“ crontab-e ”去編輯自己的例行性命令了!整個過程就如同上面提到的,會進入 vi 的編輯畫面, 然后以一個工作一行來編輯,編輯完畢之后輸入“ :wq ”儲存后離開 vi 就可以了! 而每項工作 (每行) 的格式都是具有六個字段,這六個字段的意義為:
代表意義 | 分鐘 | 小時 | 日期 | 月份 | 周 | 指令 |
數字范圍 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
比較有趣的是那個“周”。周的數字為 0 或 7 時,都代表“星期天”的意思!另外,還有一些輔助的字符,大概有下面這些:
例題:假若你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 發一封信給他,這封信的內容已經寫在 /home/dmtsai/lover.txt 內了,該如何進行?答:直接下達 crontab -e 之后,編輯成為:
59 23 1 5* mail kiki < /home/dmtsai/lover.txt
那樣的話,每年 kiki 都會收到你的這封信。
例題:假如每五分鐘需要執行 /home/dmtsai/test.sh 一次,又該如何?答:同樣使用 crontab-e 進入編輯:
*/5 * * * * /home/dmtsai/test.sh
那個 crontab 每個人都只有一個文件存在,就是在 /var/spool/cron 里面。
例題:假如你每星期六都與朋友有約,那么想要每個星期五下午 4:30 告訴你朋友星期六的約會不要忘記,則:答:還是使用 crontab -e 啊!
30 16 * * 5 mail friend@his.server.name < /home/dmtsai/friend.txt
?