Linux任務計劃
Linux任務計劃、周期性執行任務 未來某一時間點執行一次任務:at,batch 周期性計劃任務:crontab 默認執行結果會通過郵件形式發送給用戶
本地電子郵件服務
smtp:Simple Mail Transfer Protocol,既簡單郵件傳輸協議,主要用于發送郵件 pop3:Post Office Protocol,郵局協議,用于收取郵件 IMAP4:Internet Mail Access Protocol,互聯網郵件訪問協議,其功用和pop3一致 mail命令: 用于發送或接收互聯網郵件 MUA:Mail User Agent,用戶收發郵件的工具程序 mailx [-s "SUBJECT"] username[@hostname] 郵件正文的生成: (1)交互式輸入:.單獨成行可以表示正文結束;Ctrl+d提交 (2)輸入重定向: (3)通過管道;
at命令
at [OPTIONS...] TIME 常用選項: -l:顯示作業隊列,相當于atq -d:刪除指定隊列,相當于atrm -c:查看作業的詳細內容 -m:當任務完成之后,將發郵件給用戶,即使沒有標準輸出 -V:顯示版本信息 -f /PATH/TO/SOMEFILE: 注意:作業執行結果是以郵件發送給提交作業的用戶 TIME:定義出什么時候進行at 這項任務的時間 HH:MM 02:00 在今日的HH:MM 進行,若該時刻已過,則明天此時執行任務 HH:MM YYYY-MM-DD 04:00 2016-09-20 規定在某年某月的某一天的特殊時刻進行該項任務 noon, midnight, teatime(4pm) tomorrow now+#{minutes,hours,days, OR weeks} 在某個時間點再加幾個時間后才進行該項任務 at的作業有隊列,用單個字母表示,默認都是用a隊列 執行方式: 1.交互式輸入 2.輸入重定向,從指定文件中讀取 3.at -f /PATH/TO/SOMEFILE指定文件 at依賴于atd服務,需要啟動atd服務才可運行at任務 at隊列存放在/var/spool/at目錄當中
at權限控制
/etc/at.{allow,deny}用于控制用戶是否能執行at任務 白名單:/etc/at.allow默認不存在,只有該文件中的用戶才可執行at任務 黑名單:/etc/deny拒絕該文件中用戶執行at命令,而沒有在at.deny文件中的用戶則可執行 注意:如果at.deny和at.allow文件中同時定義了一個用戶,則at.allow文件優先生效 注意:如果兩個文件都不存在,則只有root用戶才可執行at任務;或者at.allow文件存在且沒有指定任何用戶
周期性計劃任務:crontab
服務程序: cronie:主程序包,提供了crond守護進程及相關輔助工具; 確保crond守護進程(daemon)處于運行狀態; CentOS 7: systemctl status crond.service CentOS 6: service crond status 向crond提交作業的方式不用于at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器 直接編輯此文件;要用crontab命令 cron任務分為兩類: 系統cron任務:主要用于實現系統自身的維護 手動編輯:/etc/crontab文件 用戶cron任務: 命令:crontab命令 日志文件:/var/log/cron 系統cron的配置格式:/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 注意: (1)每一行定義一個周期性任務; * * * * *:定義周期性時間 user-name:運行任務的用戶身份 command to be executed:任務 (2)此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量 (3)執行結果郵件發送給MAILTO指定的用戶 用戶cron的配置格式:/var/spool/cron/USERNAME # 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 注意: (1)每行定義一個cron任務,共6個字段; (2)此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量 (3)郵件發送給當前用戶 時間表示法: (1)特定值; 給定時間點有效取值范圍內的值; 注意:days of week和day of month一般不同時使用 (2)* 給定時間點上有效取值范圍內的所有值;表"每..." (3)離散取值: 在時間點上使用逗號分隔的多個值; #,#,# (4)連續取值:- 在時間點上使用-連接開頭和結束 #-# (5)在指定時間點上,定義步長: /#:#即步長; 注意: (1)指定的時間點不能被步長整除時,其意義將不復存在 (2)最小時間單位為"分鐘",想完成"秒"級任務,得需要借助額外其它機制 定義成每分鐘任務:而在利用腳本實現在每分鐘內,循環執行多次 示例: 3 * * * *:每小時的第3分鐘執行任務 4 5 * * *:每天的5點4分執行任務 3 4 * * 5:每周5的4點3分執行任務 5 6 7 * *:每月的7號的6點5分執行任務 7 8 9 10 *:每年的10月9號8點7分執行任務 0 8,20 * * 3,7:每周3和周日的8點和20點執行任務 0 9-18 * * 1-5:周1到周5的9點至18點鐘執行任務 */5 * * * *:每五分鐘執行 crontab命令: crontab [-u user] [-l | -r | -e] [-i] [-s] -e:編輯計劃任務 -l:查看計劃任務 -r:清空計劃任務 -i:交互式,當使用-r選項時,提示用戶是否繼續 -u USER:root用戶可為指定用戶配置cron任務 注意:運行結果以郵件通知給當前用戶;如果拒絕接收郵件 (1)COMMAND > /dev/null (2)COMMAND &> /dev/null 注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置于單引號中的%號不用轉義
控制用戶執行cron
/etc/cron.deny:黑名單,此文件中所定義的用戶均不可執行cron任務 /etc/cron.allow:白名單,只有在此文件中定義的用戶才可執行cron任務 白名單優先級要高于黑名單,默認白名單不存在,如果存在,則只有白名單里定義的用戶才可執行計劃任務 如果兩個文件都不存在,則只有root用戶才肯執行cron任務
原創文章,作者:zhai796898,如若轉載,請注明出處:http://www.www58058.com/46514