一、計劃任務應用場景:
需要每天對服務器上的數據進行備份,但是白天服務器的訪問量較大,服務器承受著較大的壓力,備份任務只能在夜晚服務器較空閑時才能進行?;蛘咝枰R時在某時間點執行一個任務等,都需要用到計劃任務的功能。
二、計劃任務分類:
一次性計劃任務:at
周期性計劃任務:cron
三、一次性計劃任務:
at [options]… Time
常用選項:
-l:查看作業隊列,相當于atq
-d #:刪除指定的作業,相當于atrm
-f /path/from/somefile:從指定文件中讀取作業,而不再使用驕傲胡輸入
-c #:查看指定作業的具體內容
-q queue:指明隊列
Time可以使用以下格式表示:
HH:MM[YYYY-mm-dd]
noon,midnight,teatime
tomorrow
now +#:
Unit:Minutes,Hours,Days,Weeks
at now +1min:表示1分鐘之后執行任務
at 04pm +3day:表示3天后的下午4點
例:在10:57在系統廣播“hello”
注:要執行的的任務輸入完成之后,使用ctrl + d鍵確認完成此計劃。
at任務的任務隊列:
at任務存放在/var/spool/at目錄中
默認為a隊列,任務名以a開頭。
at任務的執行方式:
at任務的執行依賴于atd服務,要使at任務能準時執行,需要保證atq服務開啟,且最好設置為開機自啟。
service atd start
chkocnfig atd on
作業的執行結果是以郵件的形式發送給提交作業的用戶,在執行at任務應盡量將輸出重定向,避免產生過多的垃圾郵件。
控制普通用戶能否創建at任務
/etc/at.deny #黑名單
黑名單中的用戶不允許創建at任務
/etc/at.allow #白名單,默認情況下,此文件未在系統中創建,需手動添加
只允許在白名單中的用戶執行at任務
若不想讓所有普通用戶創建at任務
1、刪掉at.deny文件
2、創建at.allow文件,文件內容為空
白名單優先級高于黑名單,白名單和黑名單擁有同一個用戶,則以白名單為準
四、周期性計劃任務
cron的服務程序為crond
主程序包為cronie,提供crond守護進程及相關的輔助工具。
crontab計劃任務要能準時運行,需要確保crond守護進程(daemon)處于運行狀態,且應設置為開機啟動。
在CentOS6和7啟動任務時略有不同。
CentOS7:
systemctl start crond
systemctl enable crond
CentOS6:
service crond start
chkconfig crond on
cron任務計劃分類:
系統cron任務:主要用于實現系統自身的維護。
編輯/etc/crontab完成任務定義
用戶cron任務:完成用戶自定義的任務
使用crontab命令定義任務
etc/crontab文件的配置格式:
分 時 日 月 周 Username Command to be excuted"命令的絕對路徑"
例:每天晚上9點10分運行echo命令
10 21 * * * centos /bin/echo "Howdy!"
注意:
(1)、每一行定義一個周期性任務。
(2)、此處的PATH環境變量不同于用戶登陸后的環境變量
(3)、執行結果以郵件的形式發送給指定用戶,為避免產生過多的垃圾郵件,命令產生的輸出應進行重定向處理。
時間表示法:
(1)、特定值
給定時間點有效取值范圍內的值
(2)、*
給定時間點上有效取值范圍內的所有值。表示”每…“
(3)指定時間點上的離散取值
在給定時間點上使用逗號分隔的多個值即可。
(4)連續取值
在時間點上使用“-”連接開頭和結束
(5)在指定時間點上,定義步長。
/#: #即步長
注意:
(1)指定的時間點不能被步長整除時,其意義將不復存在
(2)最小時間單位為分鐘,想完成秒級任務,需借助于其他機制??啥x成每分鐘任務:再利用腳本實現每分鐘之內,循環執行多次。
(3)* * 1,10,20 * 0,6
這樣的事件格式標識每月1號、10號、20號,以及每周六、每周日執行任務
例:
(1) 3 * * * *:每小時第三分鐘
(2) 3 4 * * 5:每周5的4點的第3分鐘
(3) 5 6 7 * *:每月7日6點5分。
(4) 7 8 9 10 *:每年第10月9號8點7分
(5) 9 8,20 * * 3,7:每周三和周日的8點9分和20點9分
(6) 1 9-18 * * 1-5;周一到周五的9點到18點每小時執行。
(7) */5 * * * *:每5分鐘執行一次
crontab命令:
crontab [options]
-u user
-l (list)
-e (edit)
-r:移除所有任務
crontab編輯時不指定用戶,為編輯當前登錄用戶的計劃任務;root可以編輯指定用戶的計劃任務。
crontab -u gentoo -e #編輯指定用戶的計劃任務
crontab -u gentoo -l #查看指定用戶的計劃任務
例:每周六凌晨0點5分備份/etc目錄下的所有配置文件至/back目錄下,命名為"etcbak-年月日-時.tar.xz“
5 0 * * 6 root /bin/tar -Jcf /etc/*.conf /backup/etcbak-`date +\%F-\%H`.tar.xz
注意:在crontab中,%具有特殊意義,若要在命令中使用%,需要轉義
管理普通用戶的計劃任務權限
/etc/cron.deny #黑名單中的用戶不能配置計劃任務。
/etc/cron.allow #只有白名單中的用戶可以配置計劃任務。若白名單中未指定用戶,則所有普通用戶都不可配置計劃任務。
白名單優先級高于黑名單
五、實戰演練
1、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
10 0 * * 0,2,4 root /bin/cp /log/message /logs/messages-`date %F`
2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
0 2 * * * root /bin/cat /proc/meminfo | /bin/grep '^[S|M].*' >> /tmp/meminfo.txt
注:在使用命令時,應通過which獲取命令的絕對路徑,再使用絕對路徑。
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/44893
文章思路清晰,層次分明,有理論也有實踐,很值得學習的一篇博客。