1. 程式人生 > >Linux學習筆記:Linux系統的進程調度(任務調度)

Linux學習筆記:Linux系統的進程調度(任務調度)

任務 調度

今天我們學習了Linux系統的進程調度,進程調度是為了在未來某個時間點,讓系統自動執行我們事先編寫好的命令或腳本的列表,從而使得即使用戶不在計算機旁邊也可以按時完成任務。這樣有利於我們更好的進行任務計劃以及在需要執行任務的時候自動完成我們設定好的命令,從而完成任務。

當然為了能夠進行進程調度,就必須要有一種機制能夠識別事件發生的時間並且能夠運行用戶所預期的命令;這種機制在Linux中是通過特定的守護進程來實現的。這類的進程有:

atd:將預先編寫好的命令在未來某個時間點執行一次。

crond: 將預先編寫好的命令在未來的符合條件的時間點重復執行。

我們在進行任務調度時需要先查看守護進程是否運行,所以我們來查看守護進程運行與否的命令如下:

在Centos6中:

]# service {atd|crond} status

結果為running或者"正在運行",都表示其正常工作

在Centos7中:

]# systemctl status {atd.service|crond.service}

結果為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.最小的時間單位是分鐘,如果計劃以秒為執行計劃任務的時間單位,必須借助於其他機制。



Linux學習筆記:Linux系統的進程調度(任務調度)