Linux任務計劃、週期性任務執行
目錄
未來的某時間點執行一次任務:at, batch
週期性執行某任務:cron
電子郵件服務
SMTP:simple mail transmission protocol, 用於傳送郵件
POP3:Post Office Protocol
IMAP4:Internet Mail Access Protocol
MUA:Mail User Agent
mailx - send and receive Internet mail
mailx [-s 'SUBJECT'] username[@hostname]
郵件正文的生成:
①直接給出,Ctrl+d
②輸入重定向
③通過管道
echo -e "How are you?\nHow old are you?" | mail
mailx
一、一次任務
1.at
at [option] TIME
TIME:
HH:MM [YYYY-mm-dd]
noon, midnight, teatime
tomorrow
now+#{minutes,hours,days, OR weeks}
常用選項:
-q QUEUE
-l:列出指定佇列中等待執行的作業;相當於atq
-d:刪除指定的作業;相當於atrm
-c:檢視具體作業任務
-f /path/from/somefile:從指定的檔案中讀取任務
P.S. 作業的執行結果以郵件通知給相關使用者
2.batch
讓系統自行選擇空閒時間去執行此處指定的任務
二、週期性任務計劃:cron
1.相關的程式包
cronie:主程式包,提供了crond守護程序及相關輔助工具
cronie-anacron:cronie的補充程式;用於監控cronie任務執行狀況;如cronie中的任務在過去該執行的時間點未能正常執行,則anacron會隨後啟動一次此任務
crontabs:包含CentOS提供系統維護任務
如何確保crond守護處於執行狀態
CentOS 7:
systemctl status crond
...running...
CentOS 6:
service crond status
計劃要週期性執行的任務提交給crond,由其來實現到點執行
系統cron任務:系統維護作業
/etc/crontab
使用者cron任務:
crontab命令
2.系統cron任務
例如:晚上9點10分執行echo命令;
10 21 * * * gentoo /bin/echo "Howdy!"
P.S. 此處命令最好使用絕對路徑
時間表示法:
①特定值;
給定時間點有效取值範圍內的值
②*
給定時間點上有效取值範圍內的所有值
表示“每...”;
③離散取值:,
#,#,#
④連續取值:-
#-#
⑤在指定時間範圍上,定義步長:
/#:#即為步長
例如:每3小時echo命令;
0 */3 * * * gentoo /bin/echo "howdy!"
3.使用者cron
crontab命令定義,每個使用者都有專用的cron任務檔案:/var/spool/cron/USERNAME
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-l:列出所有任務
-e:編輯任務
-r:移除所有任務
-i:同-r一同使用,以互動式模式讓使用者有選擇地移除指定任務
-u user:僅root可執行,代為為指定使用者管理cron任務
P.S. 執行結果以郵件通知給相關使用者
① COMMAND > /dev/null
②COMMAND &> /dev/null
對於cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義;不過,如果把%放置於單引號中,也可以不用轉義
思考:
①如何在秒級別執行任務?
* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done
②如何實現每7分鐘執行一次任務?
sleep命令:
sleep NUMBER[SUFFIX]...
SUFFIX:
s:秒, 預設
m:分
h:小時
d:天
回顧
任務計劃:
一次性執行某任務:at, batch
週期性執行某任務:crond --> anacron
* * * * * COMMAND
參考資料:
馬哥隨堂筆記
注:誠懇歡迎讀者對本文提出批評意見,若發現存在錯誤,我定第一時間修改。如果讀者覺得文章對您有幫助,歡迎點贊鼓勵一下喲٩(๑❛ᴗ❛๑)۶。