任務計劃的分類:
一次性的任務計劃:只執行一次
周期性的任務計劃:每隔一定的周期去做相同的事情
設置任務計劃功能的工具:at和crontab
at:專門處理一次性的計劃任務
crontab:根據定義的周期信息,循環做一些事情
batch:系統自行選擇空閑時間去執行此處指定的任務
At命令:
查看atd狀態和啟動atd服務及其配置文件路徑:
centos6:service atd status
service atd start
/etc/rc.d/init.d/atd
centos7:systenctl status atd.service
systenctl start atd.service
/usr/lib/systemd/system/atd.service
at命令:at [option] TIME
常用選項:
-V:顯示版本信息:
-l:列出指定隊列中等待運行的作業;相當于atq(若計劃被執行,則任務結束,不會再顯示在列表)
-d:刪除指定的作業;相當于atrm
at -d ?2 ?3 ? ?刪除2和3
-c: 查看具體作業任務 ?(相當于用cat查看原文件)
-f:/path/from/somefile:從指定的文件中讀取任務
-m:當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶
TIME:定義出什么時候進行 at 這項任務的時間
HH:MM [YYYY-mm-dd]
noon, midnight, teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}
示例:
1)at 02:00 ?今天2點執行該項任務,若2點已過,則明天2點執行
2)at 02:00 2016-09-20 ??2016年9月20號2點執行該項任務
3)at now +1 minutes/hours/days/weeks ?一分鐘/一小時/一天/一周后執行該項任務
4)at 17:20 tommorrow 明天的17:20執行該項任務
執行方式:
1)交互式
2)輸入重定向
3)at –f 文件
依賴與atd服務,需要啟動才能實現at任務,at隊列存放在/var/spool/at目錄中
/etc/at.{allow,deny}控制用戶是否能執行at任務
白名單:/etc/at.allow 默認不存在,只有該文件中的用戶才能執行at命令
黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶執行at命令,而沒有在at.deny 文件中的使用者則可執行。如果兩個文件都不存在,只有 root 可以執行 at 命令
周期性任務計劃cron:
相關的程序包:
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie的補充程序,用于監控cronie任務執行狀況,如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨后啟動一次此任務
crontabs:包含CentOS提供系統維護任務
確保crond守護處于運行狀態:
CentOS 7: ? ?systemctl status crond
CentOS 6: ? ?service crond status
計劃周期性執行的任務提交給crond,到指定時間會自動運行
系統cron任務: /etc/crontab
用戶cron任務: crontab命令
日志:/var/log/cron
注釋行以 # 開頭
例如:晚上9點10分運行echo命令
10 21 * * * root /bin/echo “hello world!”
時間表示法:
1)特定值:給定時間點有效取值范圍內的值
2)*:給定時間點上有效取值范圍內的所有值,表示“每…”
3)離散取值:#,#,# ?如:1,3,5
4)連續取值:#-# ?如:1-5
5)在指定時間范圍上,定義步長:
/#: #即為步長 即:/5 ?5就表示步長
如:*/5 ?* ?* ?* ?* ?root /bin/echo “hello world!” 每5分鐘執行一次任務
* ?*/5 ?* ?* ?* ?root /bin/echo “hello world!” 每5小時執行一次任務
* ?2/5 ?* ?* ?* ?root /bin/echo “hello world!” 從2點開始,每5小時執行一次任務,下一天的2點繼續執行
*/5 ?2 ?* ?* ?* ?root /bin/echo “hello world!” 從2點開始,每5分鐘執行一次任務
*/5??*??1,5,10??*??5,6??root /bin/echo “hello world!” 每月的1號、5號、10號或者每周的星期五、星期六,每5分鐘執行一次任務
時間格式
@reboot Run once after reboot.
@yearly 0 0 1 1 *
@annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@hourly 0 * * * *
示例:每3小時echo和wall命令
0 */3 * * * centos /bin/echo “hello”;/usr/bin/wall ?“welcome to Magedu!”
anacron系統
運行計算機關機時cron不運行的任務,CentOS6以后的版本取消了anacron服務,由crond服務管理?對筆記本電腦、臺式機、工作站、偶爾要關機的服務器及其它不一直開機的系統很重要對很有用
配置文件:/etc/anacrontab,負責執行/etc/ cron.daily ?/etc/cron.weekly /etc/cron.monthly中系統任務。
字段1:如果在這些日子里沒有運行這些任務……
字段2:在重新引導后等待這么多分鐘后運行它
字段3:任務識別器,在日志文件中標識
字段4:要執行的任務
由/etc/cron.hourly/0anacron執行
當執行任務時,更新/var/spool/anacron/cron.daily 文件的時間戳
管理臨時文件
CentOS6使用/etc/cron.daily/tmpwatch定時清除臨時文件
CentOS7使用systemd-tmpfiles-setup服務實現
crontab命令定義,每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
crontab命令:(支持普通用戶)
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任務
-e: 編輯創建任務
編寫的任務存放在/var/spool/cron 下
-r: 移除所有任務
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
如:crontab -l -u wang = cat wang
默認用vi打開,如果想讓命令以帶顏色的方式展現,可以輸入export EDITOR=vim >> /etc/profile.d/cron.sh就可以了。
控制用戶執行計劃任務:/etc/ cron.allow 、/etc/cron.deny
在at和crontab中不要使用標準輸出,因為即使沒有標準輸出,也會以郵件方式發送給你,所以盡量不使用標準輸出,可以 &> /dev/null中 (根用戶能夠修改其它用戶的作業)即:運行結果的標準輸出和錯誤以郵件通知給相關用戶
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
對于cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義,將%放置于單引號中,則可不用轉義
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86724