linux任務計劃、週期性任務執行
未來的某個時間點執行一次某任務:at,batch 週期性運行某任務:crontab 執行結果:會通過郵件發給用戶
mail 簡單使用
查看本地電子郵件服務是否開啓 ~]$ netstat -tnlp ~]$ ss -tnl 確保 127.0.0.1:25 處於監聽狀態就行 本地電子郵件服務: smtp:simple mail transmission proticol pop3:post Office Procotol imap4:Internet Mail Access procotol mail命令: mailx - send and receive Internet mail MUA:Mail User Agent郵件用戶代理:用戶收發郵件的工具程序 mailx [-s 'subject'] username[@hostname] 郵件正文的生成: (1)交互式輸入;.單獨成行可以表示正文結束,Ctrl+D提交也可以 ~]# mail -s 'hello ci' ci hi . EOT [root@CentOS6 ~]# (2)通過輸入重定向; mail ci < /etc/fstab (3)通過管道; cat /etc/fstab |mail -s 'fstab file' ci
at命令
at [OPTION]... TIME TIME: HH:MM[YYYY-mm-dd] noon(中午十二點),midnight(午夜十二點),teatime(下午四點),tomorrow now+# UNIT:minutes,hours,days,OR weeks [ci@CentOS6 ~]$ at now+2min at> cat /etc/fstab at> <EOT> job 2 at 2016-08-16 10:16 [ci@CentOS6 ~]$ at -l 2 2016-08-16 10:16 a ci [ci@CentOS6 ~]$ at的作業有隊列,用單個字母表示,默認使用a隊列 常用選項: -l:at -l =atq 查看之前提交的等待執行的作業隊列,執行完成消失 at -f at.tasks now+5min -f /path/from/somefile:從指定文件中讀取作業任務,而不用再交互輸入;文件中的內容爲一行行的命令 at -d 3 刪除指定作業號的作業 at -d 3 = atrm 3 at -c :查看指定作業的具體內容 -q QUEUE:指明隊列 注意:作業執行結果是以郵件發送給提交作業的用戶
batch命令:
batch會讓系統自行選擇在系統資源空閒的時間去執行指定的任務
週期性任務計劃cron
cron介紹
服務程序: cronle程序包:主程序包,提供了crond守護進程及相關輔助工具; 確保crond守護進程(daemon)處於運行狀態 CentOS 7: systemctl status crond.service Active:active(running) CentOS 6: service crond status ...is running 注意:向crond提交作業的方式不同於at,它需要使用專用的配置文件,此文件有固定格式,不建議使用文本編輯器直接編輯此文件。要使用crontab命令; crontab會提示語法錯誤, cron任務分爲兩類 系統cron任務:只要用於實現系統自身的維護; 手動編輯:/etc/crontab文件 此種任務基本上不會用到用戶自行修改 用戶cron任務: 命令:crontab命令 系統crontab的配置格式 # 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)每一行定義一個週期性任務,共7個字段; * * * * *:定義週期性時間 user-name:運行任務的用戶身份 command to be executed:任務 (2)此處的環境變量不同於用戶登陸後獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量。 (3)執行結果郵件發送給MAILTO指定的用戶 用戶cron的配置格式:/var/spool/cron/USERNAME 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)每行定義一個cron任務,共6個字段 (2)此處的環境變量不同於用戶登陸後獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量。 (3)郵件是發送給當前用戶
時間表示法:
(1)特定值: 給定時間點有效取值範圍內的值; 注意:day or week 和 day of month 一般不同時使用; (2)* 給定時間點上有效取值範圍內的所有值;表“每” (3)指定時間點上的離散取值: 在給定時間點上使用逗號分隔的多個值; #,#,#(4)連續取值:- 在時間點上使用-鏈接開頭和結束 #-#(5)在指定時間點上,定義步長:/#:#即步長 */2 注意: (1)指定的時間點不能被步長整除時,其意義將不復存在; (2)最小時間單位爲“分鐘”,想完成秒級程序任務,得需要額外藉助於其它機制 定義成每分鐘任務:而在利用腳本實現每分鐘內,循環執行多次; 示例: (1)3 * * * * :每小時執行一次,每小時的第3分鐘 (2)3 4 * * 5:每週執行一次,每週五4點3分執行; (3)5 6 7 * * :每月的7號的6點5分 (4)7 8 9 10 *:每年執行一次,每年的10月9號8點7分; (5)9 8 * * 3,7:每週三和週日的8點9分 (6)0 8,20 * * 3,7:每週三和週日的8點和20點 (7)0 9-18 * * 1-5 :工作時間週一至週五的9點到18點,每小時執行一次 (8)*/5 * * * * :每5分鐘執行一次某任務 (9)77
crontab命令的用法
crontab [-u user] [-l | -r | -e] [-i] [-s] -e:編輯任務; -l:列出所有任務 -r:移除所有任務;即刪除/var/spool/cron/USERNAME文件 -i:在使用-r選項移除所有任務時,提醒用戶確認 -u user:root用戶可爲指定用戶管理cron任務 注意:運行結果以郵件通知當前用戶,如果拒絕收郵件; (1)COMMAND > /dev/null (2)COMMAND &> /dev/null 注意:定義COMMAND時,如果命令需要用到%,需要對其轉義。但放置於單引號中的%不用轉義亦可;
思考:某任務在指定的時間因關機未能窒息感,下次開機會不會自動執行?
不會, 如果期望某時間因故障未能按時執行,下次開機後無論是否相應時間點都要執行一次,可以使用anacron實現;
練習:
1. 每12小時備份一次/etc目錄至/backup目錄中,保存文件名稱格式爲“etc-yyyy-mm-dd-hh.tar.xz”2.每週2,4,7備份/var/log/secure文件至/logs目錄中,文件格式爲“secure-yyyymmdd'3.每兩小時取出系統/proc/meminfo文件中以S或M開頭的行信息追加至/tmp/meminfo.txt中;