Linux任務計劃,周期性任務執行
未來的某時間點執行一次某任務:at, batch
周期性運行某任務:crontab
執行結果:
~]# netstat -tnlp
~]# ss -tnl
本地電子郵件服務:
smtp: simple mail transmission protocol
pop3: Post Office Procotol
imap4: Internet Mail Access Procotol
mail命令:
mailx – send and receive Internet mail
MUA:Mail User Agent,用戶收發郵件的工具程序;
mailx [-s 'SUBJCT'] username[@hostname]
郵件正文的生成:
(1) 交互式輸入:單獨成行可用標識正文結束;Ctrl+d提交亦可;
(2)通過輸入重定向;
(3)通過管道:
at 命令:
at [OPTION]….TIME
TIME:
HH:MM [YYYY-mm-dd]
noon, midnight, teatime
tomorrow
now+#
UNIT:minutes, hours,days,or weeks
at的作業隊列,用單個字母表示;默認都使用a隊列;
常用選項:
-l: 查看作業,相當于atq
-f: /PATH/FROM/SOMEFILE:從指定文件中讀取作業任務,而不用再交互式輸入;
-d: 刪除指定的作業,相當于atrm;
-c: 查看指定作業的具體內容;
-q: QUEUE:指明隊列;
注意:作業執行的結果是以郵件發送提交作業的用戶
batch命令:
batch命令會讓系統自行選擇在系統資源交空閑的時間去執行指定的任務;
周期性任務計劃:cron
服務程序:
cronie:主程序包,提供了crond守護進程及相關輔助工具;
確保crond 守護進程(daemon)處于運行狀態:
Centos 7 :
systemctl satus crond.service
Active:active (running)….
Centos 6 :
service crond status
…is running
向crond提交作業的方式不同于at,它需要使用專用的配置文件,次文件有固定格式,不建議使使用文本編輯器直直接編輯此文件;要使用crontab命令;
cron任務分為兩類:
系統cron任務:主要用于實現系統自身的維護;
用cron任務:/etc/cron/tab
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:運行任務的用戶身份
(2)此時的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕路徑,或者自定義PATH環境變量;
(3)執行結合郵件發送給AMAILTO指定的用戶;
用戶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
# | | | | |
# * * * * command to be executed
注意:
(1)每行第那樣一個cron任務,共6個字段;
(2) 此時的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕路徑,或者自定義PATH環境變量;
(3)郵件發送給當前用戶;
時間表示法:
(1)特定值:
給定時間點的有效取值范圍內的值:
注意:day of week和day of month 一般不同時使用:
(2)*
給定時間點上有效取值范圍內的所有制;表 “每…"
(3)離散取值: ,
在時間點上使用逗號分隔的多個值;
#,#,#,
(4)連續取值: –
在時間點上使用- 連接開頭和結束
#-#
(5)在指定是幾點上,定義步長;
/#: #即步長:
*/2
注意:1、指定的時間點不能被步長整除時,其意義將不符存在;
2、最小時間單位為”分鐘“,想完成”秒“級任務,得需要額外借助于其它
機制;定義成每分鐘任務;而在利用腳本實現在每分鐘之內,循環執行多次;
示例:
(1)3****:每小時執行一次,每小時第3分鐘;
(2)34**5:每周執行一次:每周5的4點3分;
(3)5 6 7 * *: 每月執行一次; 第 月的7號的6點5分;
(4)7 8 9 10 *:每年執行一次, 每年的10月9號8點7分;
(5)9 8 * * 3,7 :每周三和周日;
(6)0 8,20 * *3,7:
(7)0 9-18 * * 1-5:
(8)*/5 * * * *: 每五分鐘執行一次某任務;
(9)*/7
crontab命令:
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
-e: 編輯任務;
-l: 列出所有任務
-r: 移除所有任務:即刪除/var/spool/cron/RSERNAME文件:
-i: 在使用-r 選項移除所有任務是提示用戶確認;
-u: user: root用戶可為指定用戶管理cron任務
注意:運行結果一郵件通知給當前用戶;如果拒絕解釋郵件:
(1):COMMAND>/dev/null
(2):COMMAND &/dev/null
注意:定義COMMAND時,如果命令需要用到%,需要對其轉義;但放置于單引號中的%不用轉義亦可;
思考:某任務在指定的時間因關機未能執行,下次開機會不會自動執行?
不會!
如果期望某時間因故未能按時執行,下次開機后無論是否到了相應時間點都要執行一次,可使用anacron實現
原創文章,作者:shadow,如若轉載,請注明出處:http://www.www58058.com/65457
給你出一題,每天晚上的02:10:10秒執行一個任務如何寫?