有的工做是例行性的(如上下班打卡),linux
有的工做則是臨時發生的(如商品大降價)。安全
兩種工做調度的方式:bash
要使用單一工做調度,linux系統上面由atd來負責這個調度的服務,首先啓動/etc/init.d./atd restart
能夠設置一下開機時就啓動這個服務,省得每次從新啓動都得再來一次。 chkconfig atd onui
at 安全管理
/etc/at.deny 將不可使用at的帳號寫入其中,若未記錄到這個文件當中的用戶,就可使用at..net
at 的參數使用unix
at [-m -v -c -l -d ] TIME -m 當at的工做完成後,即便沒有輸出信息,以emial 通知用戶該工做已完成 -l 至關於atq,列出全部用戶的at任務 -d 至關於atrm, 去掉at的任務 -v 可使用較明顯的時間格式列出at調度中的工做 -c 列出後面接的該工做的實際命令內容 TIME: 時間格式,這裏能夠定義何時進行at這項工做時間, 格式有: HH:MM ex>04:00 HH:MM YYYY-MM-DD ex>04:00 2012-04-01 HH:MM[am|pm] [Month] [Date] ex>04:00 March 17 HH:MM[am|pm] +number [minutes|hours|days|weeks] ex>now +5 minutes 就是說,在如今在加5minutes後進行該工做調度
編寫例行性工做時應注意:使用命令時,儘可能用絕對路徑,使用Ctrl+d 結束編寫。rest
相對於at是僅執行一次的工做,循環執行的例行性工做調度則是由cron(crond)這個系統服務來控制的。code
用戶想要新建循環型工做調度時,使用的是crontab這個命令。不過,爲了安全性的問題,與at相似,咱們能夠限制使用crontab的用戶帳號。使用的限制數據有:crontab
若是兩個文件同時存在,那麼/etc/cron.allow 優先,
若是兩個文件都不存在,那麼只有root用戶能夠安排做業。內存
crontab [-u username] [-l|-e|-r] -u:只有root才能進行這個任務,也即幫其餘用戶新建/刪除crontab工做調度; -e: 編輯 crontab的工做內容 -l: 查閱 crontab 的工做內容 -r:刪除全部的 crontab 的工做內容, 若僅要刪除一項,請用-e去編輯。
查詢用戶目前的crontab內容: crontab -l
若是,若僅想要刪除一項工做而已的話,必需要用 crontab -e 去編輯 若是想要所有的工做都刪除,才使用 crontab -r
基本上,cron這個服務的最低檢測限制是"分鐘",因此cron會每分鐘去讀取一次 /etc/crontab與 /var/spool/cron裏面的數據內容,所以, 只要你 編輯完 /etc/crontab這個文件,而且將它保存起來以後,那麼cron的設置就自動會來執行了!
在linux下面的crontab 會自動幫咱們每分鐘從新讀取一次/etc/crontab 的例行工做事項,可是出於某些緣由或者是其餘的unix系統中,因爲crontab 是讀到內存中的,因此在你修改完/etc/crontab以後,可能並不會立刻執行,這時候請從新啓動crond這個服務 "/etc/init.d/crond restart"
[root[@localhost](https://my.oschina.net/u/570656) lvhuizhen]# vi /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
| 表明意義 | 分鐘 | 小時 | 週期 | 月份 | 周 | 命令| | :------------- | :------------- | | 數字範圍 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 命令|
比較有趣的是按個周,周的數字爲0或7時,都表明星期天,另外, 還有一些輔助的字符,以下:
特殊字符 | 表明意義 |
---|---|
*(星號) | 表明任什麼時候刻都接受的意思! |
,(逗號) | 表明分隔時段的意思。舉例來講,若是下達的工做是 3:00 與 6:00時,就會是: 0 3,6 * * * command 時間參數仍是有五欄,不過第二欄是3,6,表明3與6都適用! |
-(減號) | 表明一段時間範圍內,舉例來講, 8點到12點之間的每小時的20分都進行一項工做: 20 8-12 * * * command 仔細看第二欄變成8-12,表明8,9,10,11,12都適用的意思! |
/n(斜線) | 那個n表明數字,每隔n單位時間的意思,例如每五分鐘進行一次,則: */5 * * * * command 很簡單吧,用*與/5搭配, 也能夠寫成 0-59/5, 意思相同 |
有的時候,咱們系統的cron來進行例行性工做時,須要一些使用方面的特性。舉例來講:若是咱們有四五個工做都是五分鐘要進行一次的, 那麼是否這四個操做都在同一個時間點進行?若是同時進行,該四個操做又很耗費系統資源,如此一來,每五分鐘不是會讓系統忙的要死! 此時要好好的分配一些運行時間就OK啦,因此,注意一下: * 資源分配不均的問題 * 取消不要的輸出選項 * 安全的檢驗 * 周與日,月不可同時並存