1.基礎概念linux
Linux能夠經過at,batch來設定任務執行計劃,讓任務在指定時間點運行,運行的結果將會以郵件的形式告知給設定運行計劃的用戶。若是須要週期性運行某任務則要用到cron命令服務器
2.相關命令ide
2.1mailx工具
用途:mailx是linux的內置郵箱處理工具,能夠用來查看發送郵件。通常電子郵件服務包含以下三種協議smtp(簡單郵件傳輸協議,用於傳送郵件)、pop3(郵局協議,用來收郵件)、imap(因特網郵件傳輸協議,用來收郵件)。Imap郵件協議目前在企業中使用比較普遍,他能與服務器完成雙向同步,比較適合多客戶端操做。spa
郵件查看:orm
[root@localhost ~]# mailx ####輸入mailx命令隊列
Heirloom Mail version 12.5 7/5/10. Type ? for help.進程
"/var/spool/mail/root": 4 messagescrontab
> 1 user@localhost.local Thu Mar 9 15:43 90/2906 "[abrt] full crash report" #### 郵ip
2 root Sat Jun 3 09:40 49/1208 "Output from your job 3" #### 件
3 root Sat Jun 3 15:34 16/542 "Output from your job 4" #### 隊
4 root Sat Jun 3 20:40 19/623 "Hi #### 列
& ?
?註釋:
#(數字)+ 回車:查看指定序號的郵件
delete #(數字)+ 回車:刪除指定序號的郵件
l + 回車:列出能夠操做的全部命令
q + 回車:退出mailx命令。
發送郵件:
mailx [-s 'SUBJECT'] username[@hostname]
郵件正文的生成:
(1) 直接給出,Ctrl+d;
(2) 輸入重定向;
(3) 經過管道;
echo -e "How are you?\nHow old are you?" | mail
2.2 at
用途:用於管理計劃做業任務。
格式:at [ option ] TIME
TIME:
HH:MM [ YYYY-mm-dd ] :指定具體幾點幾分執行,還能夠加上年月日
noon:指定中午執行
midinight:午夜12點執行
teatime:下午茶時間執行,通常在下午5點
now + #{minutes,hours,days,weeks}:如今時間爲基點,多少分、小時、天、周後執行
經常使用選項:
-q QUEUE:使用指定的佇列(Queue)來儲存,at 的資料是存放在所謂的 queue 中,使用者能夠同時使用多個 queue
-l :列出指定隊列中等待運行的做業,至關於atq
-d:刪除指定做業,至關於atrm
-c:查看具體的做業任務
-f /path/form/somefile :從指定文件中讀取任務
2.3 batch:
用途:batch實際上也是調用at,讓系統自動選擇空閒時間去執行此處指定的任務;
2.4 cron
功能:管理週期性任務。
簡介:
相關的程序包:
cronie:cron主程序包,提供了crond守護進程及相關輔助工具,若是要運行cron先使用systemctl status crond(CentOS 7)/service crond status(CentOS 6)命令確認crond是否運行。
cronie-anacron:cronie的補充程序,用於監控cronie任務執行的狀況,若是cronie程序設置的任務在設定的時間點未執行,則anacron會在隨後啓動一次此任務。
crontabs:包含CentOS提供的系統維護任務
系統cron任務:
經過編輯 /etc/crontab 文件來實現,編輯/etc/crontab文件這種方式僅限於root用戶使用。
# 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
示例:晚上9點10分備份一次 /etc 到/root/bakup下。
# 10 21 * * * user-name cp -a /etc/root/bakup/
時間表示方法:
(1) 特定值:給定有效時間點,例如上述示例,指定晚上9點10分,經過10 21 * * * 來表示
(2) * :給定時間點上全部有效值,好比將*寫在分鐘裏則表示每分鐘
(3) 離散取值 ,:指定某幾個不連續的時間點例如「0 0 * * 1,3,5 」則表示每週1、3、五的00:00執行做業
(4) 連續取值 -:指定一個取值範圍,例如「0 1-3 * * *」則表示在天天1點、2點、3點執行做業。
(5) 定義步長 / :在指定的範圍內定義步長,好比「*/10 * * * *」則表示每10分鐘執行一次做業。即10分、20分、30分、40分、50分、60分各執行一次做業。
用戶cron任務:
用戶使用crontab命令來定義週期性計劃任務,每一個用戶都有一個專用的文件放置於/var/spool/cron/USERNAME,可是除root外的其餘用戶沒有查看、編輯此文件的權限,只能經過crontab命令將計劃任務按照規定格式寫入到此文件中。
格式:crontab [ -u user ] [ -l | -r | -e ] [ -i ]
參數:
-l :列出當前用戶全部的任務
-e :編輯任務
-r :移除全部任務
-i :同-r一塊兒使用,以交互式模式讓用戶有選擇的移除指定任務
-u user :僅root用戶可運行,root用戶可代其餘用戶管理cron任務
sleep命令:
用途:指定休眠時間,配合crontab可實現非秒級或不能被整除的時間表示
格式:sleep NUMBER [ SUFFIX ]
SUFFIX:
s :秒,若是不填寫suffix,默認都是秒
m :分
h:小時
d:天
注意點:
(1) 因爲cron執行任務時使用的是本身的環境變量,因此建議使用命令的絕對路徑。
(2) 因爲運行結果都會以郵件通知相關用戶,COMMAND > /dev/null表示只將執行錯誤的信息郵件通知用戶,COMMAND &> /dev/null 表示不經過郵件通知相關用戶執行結果
(3) 對於cron任務來講,%有特殊用途,因此命令中如果要使用%必須使用轉義符\,不過若是把%放置於單引號中可不轉義
示例:
(1) 在/root目錄下有一個文件1,每10秒將date執行結果追加到文件1中。
[root@localhost cron]# crontab -e
no crontab for root - using an empty one
* * * * * sleep 10;date>>/root/1
* * * * * sleep 20;date>>/root/1
* * * * * sleep 30;date>>/root/1
* * * * * sleep 40;date>>/root/1
* * * * * sleep 50;date>>/root/1
~
~
~
"/tmp/crontab.rZAyFQ" 5L, 165C written
crontab: installing new crontab
[root@localhost ~]# cat 1
Tue Jun 6 16:03:12 CST 2017
Tue Jun 6 16:03:22 CST 2017
Tue Jun 6 16:03:32 CST 2017
Tue Jun 6 16:03:42 CST 2017
Tue Jun 6 16:03:52 CST 2017
Tue Jun 6 16:04:11 CST 2017
Tue Jun 6 16:04:21 CST 2017
Tue Jun 6 16:04:31 CST 2017
Tue Jun 6 16:04:41 CST 2017
Tue Jun 6 16:04:51 CST 2017
Tue Jun 6 16:05:11 CST 2017
(2) 每4小時備份一次/etc目錄至/root/backup目錄中,保存的文件名稱格式爲「etc-yyyy-mm-dd-HH.tar.xz」。
* */4 * * * cp -a /etc /root/backup/etc;tar -Jcf /root/backup/etc-`date '+%Y-%m-%d-%H'`.tar.xz /root/ba
ckup/etc
(3) 每週2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如「messages-yyyymmdd」
* * * * 0,2,4 cp -a /var/log/messages /logs/messages-`date '+%Y%m%d'`
(4) 每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
* */2 * * * cat /proc/meminfo|grep ^[SM].* >> /tmp/meminfo.txt
(5) 工做日時間內,每小執行一次「ip addr show」命令
* */1 * * 1-5 ip addr show