例行性工做

什麼是例行性工做

有的工做是例行性的(如上下班打卡),linux

有的工做則是臨時發生的(如商品大降價)。安全


Linux工做調度的種類: at cron

兩種工做調度的方式:bash

  • 一種是例行性的,就是每隔必定的週期要來辦的事項;
  • 一種是突發性的,就是此次作完之後就沒有的那一種(如計算機大降價);
  • at : at 是個能夠處理僅執行一次就結束的工做。
  • crontab: crontab這個命令所設置的工做將會循環一直進行下去。

突發性的工做調度(at)

要使用單一工做調度,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
    • 將可使用crontab的帳號寫入其中,若不在這個文件內的用戶則不可以使用crontab.
  • /etc/cron.deny
    • 將不可使用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


系統的配置文件: /etc/crontab

基本上,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啦,因此,注意一下: * 資源分配不均的問題 * 取消不要的輸出選項 * 安全的檢驗 * 周與日,月不可同時並存

相關文章
相關標籤/搜索