今天咱們學習了Linux系統的進程調度,進程調度是爲了在將來某個時間點,讓系統自動執行咱們事先編寫好的命令或腳本的列表,從而使得即便用戶不在計算機旁邊也能夠按時完成任務。這樣有利於咱們更好的進行任務計劃以及在須要執行任務的時候自動完成咱們設定好的命令,從而完成任務。bash
固然爲了可以進行進程調度,就必需要有一種機制可以識別事件發生的時間而且可以運行用戶所預期的命令;這種機制在Linux中是經過特定的守護進程來實現的。這類的進程有:ide
atd:將預先編寫好的命令在將來某個時間點執行一次。工具
crond: 將預先編寫好的命令在將來的符合條件的時間點重複執行。學習
咱們在進行任務調度時須要先查看守護進程是否運行,因此咱們來查看守護進程運行與否的命令以下:命令行
在Centos6中:
隊列
]# service {atd|crond} status進程
結果爲running或者"正在運行",都表示其正常工做事件
在Centos7中:crontab
]# systemctl status {atd.service|crond.service}it
結果爲active(running)就表示其正常工做
全部的進程調度的結果都會以電子郵件的方式發送到用戶的郵箱中。
本地電子郵件服務:
SMTP:Simple Mail Transfer Protocol,簡單郵件傳輸協議,TCP/25
POP3:Post-Office Protocol Version 3,郵局協議第三版,TCP/110
IMAP4:Internet Mail Access Protocol Version 4,互聯網郵件訪問協議第四版,TCP/143
atd守護進程可以識別和完成由at命令、batch命令製做的任務計劃;
at命令:
at, batch, atq, atrm - queue, examine or delete jobs for later execution
at [option] TIME
TIME:
1.HH:MM [YYYY-mm-dd]
2.noon, midnight, teatime
3.tomorrow
4.now+#UNIT UNIT:min, hours, days, weeks, months, years...
at定義的做業有隊列的概念,一般隊列使用單個字母來表示,默認是a;
at -q QUEUE_NAME TIME
選項:
-q QUEUE
-f FILE
-l:查看隊列,至關於atq
-d JOB_ID:清除指定的計劃做業,至關於atrm
-c:查看指定的做業的內容
batch命令:
batch命令在定義任務的時候,無需指定時間,是由系統自行選擇在系統比較空閒的時候,完成此計劃任務;其餘的配置與at徹底相同;
下面就是週期性任務調度計劃:cron
cronie軟件包,提供crond守護進程以及cron的其餘管理工具
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.各個字段之間使用一個或多個空白字符進行分隔; 3.任務運行的結果以郵件的方式直接發送給root用戶; 用戶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. * * * * *:定義週期執行任務的時間 command to be executed:應該執行的任務命令及命令行參數; 注意:爲了保證任務可以準確執行,命令一般是用絕對路徑填寫; 2.各個字段之間使用一個或多個空白字符進行分隔; 3.任務運行的結果以郵件的方式直接發送給發佈任務的用戶; 時間表示法: 1.特定時間:給定時間點的有效取值範圍內的全部有效值; 0 5 3 9 * 2.通配符時間:*,表示"每..."之意,給定時間點的全部有效值; * * * * * 3.離散時間:在給定的時間點上,使用逗號分隔; 0 8,20 * * 1,3,5 4.連續時間:在給定的時間點上,使用減號分隔; 0 8 * * 1-5 5.步長時間:在給定的時間點上,使用除號分隔; */2 * * * * */7 * * * * 此種方式沒法實現每7分鐘爲間隔執行計劃任務; 注意: 1.指定的步長必須能被時間點的數值整除,不然,無心義; 2.最小的時間單位是分鐘,若是計劃以秒爲執行計劃任務的時間單位,必須藉助於其餘機制。