概述
任務計劃其實就是針對未來的某一刻或者是某一周期內設置要執行的工作;
任務計劃分為兩種:
1、一次性任務:在指定的未來的某個時間點僅執行一次任務;
命令:at batch
2、周期性任務:根據設置的時間循環工作。
命令:crontab
一次性工作調度
at命令
使用at命令時,首先其服務atd必須開啟,否則無法使用此命令。
語法格式: at [-ldc] TIME
下面舉例來說明at命令的用法:
1、使用at命令來設置任務:
上面的命令表示:從現在起2分鐘后執行ls /tmp命令,使用快捷鍵Ctrl+d來結束命令輸入。
at命令并不會把執行結果輸出到屏幕上,而是默認給任務設置者發送郵件;每個用戶被創建時系統都會默認為其創建郵箱,可以通過變量$MAIL來查看郵箱的路徑,以root用戶為例:
可以看到root用戶的郵箱路徑
查看郵箱最下面的內容即為ls /tmp的結果
在上面的at命令中使用 now + 2 minutes來指定時間,下面詳細說明時間的表示方法:
絕對時間:
HH:MM:表示在今日的HH:MM時執行任務,若設置任務時已經超過了此時間,則為明天的HH:MM執行。如:02:00。
HH:MM YYYY-MM-DD:表示在某年某月某日的HH:MM執行任務。如:02:00 2015-03-25。
HH:MM[am|pm] [Month] [Date]:表示某月某日的HH:MM執行任務。
相對時間:
now + # [minutes|hours|days|weeks]:表示從現在開始再過多少時間執行任務。
模糊時間:
noon:相當于12:00
midnight:相當于00:00
teatime:相當于4:00 pm
tomorrow:明天
2、查詢已經設置的at任務
第一列為任務的編號,之所以是5和6是因為之前的at任務已經執行完成;
第二列是任務執行的時間;
最后一列表示任務的執行者為root。
此命令相當于命令atq。
3、刪除已經設置的at任務
刪除編號為5的at任務。
此命令相當于命令atrm。
4、查看at任務的工作內容
使用-c選項可以輸出任務的工作腳本,其實此參數就是將/var/spool/at/目錄中與任務相對應的文件顯示了出來;使用at命令設置好的任務都會以/var/spool/at/目錄中自動生成一個腳本文件,如下圖:
可以看到文件中a0000后的數字與任務編號相對應。
5、at的權限
at使用/etc/at.allow和/etc/at.allow兩個文件來控制權限。
1、寫在/etc/at.allow文件中的用戶可以才能使用at;
2、如果/etc/at.allow不存在,查找/etc/at.deny文件,如果寫在/etc/at.deny文件中則不能使用at,否則就有使用at的權限;
3、如果兩個文件都存在,則/etc/at.allow文件生效;
3、如果兩個文件都不存在,就只有root可以使用at命令。
batch命令
功能與at相同,但不需要指定時間,自動選擇系統空閑時運行計劃任務。
周期性工作調度
crontab命令
使用此命令必須確保crond服務是開啟狀態。
語法格式:crontab [-u username] [-l|-e|-r]
-e:編輯crontab的工作內容;
-u:只有root用戶才能使用此參數,幫助其它用戶建立任務;
-l:查閱crontab的工作內容;
-r:刪除crontab的所有工作內容。
1、編輯cron任務
在第一次使用crontab -e命令進行編輯工作時,會發現這是一個空的文件,沒有任何文字可供參考,那么任務怎么寫呢?
系統提供了crontab的配置文件,打開/etc/crontab文件可以看到格式的說明:
文件上面的部分是定義的環境變量,這些環境變量已經在系統中都定義可以正常使用了,為什么還要在配置文件中再定義一次呢?
由于crontab定義的是周期性任務,在運行任務時并不能保證任務發起者處于系統登錄狀態,如果用戶退出登錄后,其對應的環境變量也被相應的取消了;那么任務運行的環境($SHELL),命令查找的路徑($PATH)等信息就都無法讀取,會造成任務的執行失敗;在任務運行前先從配置文件中讀取環境變量,就可以避免此問題的發生了。
文件下面的部分是crontab任務的格式說明,我們根據配置文件的信息來說明crontab任務的格式。
cron任務分為兩類:
1、系統cron任務
格式:分鐘 小時 天 日 周幾 用戶 任務
2、用戶cron任務
格式:分鐘 小時 天 日 周幾 任務
時間的有效取值范圍:
分鐘:0-59
小時:0-23
天: 1-31
月: 1-12
周: 0-7,0和7都表示周日
時間通配表示:
* :對應時間的所有有效取值
,:離散時間點, 10,40 * * * * 每小時第10分鐘和第40分鐘
– :連續時間 10 02 * * 1-5 每周一到周五
/ :對應取值范圍內每多久一次 */3 * * * * 每3分鐘
例如:0 5 * * 1 表示每周一的5點鐘;
* 5 * * 1 表示每周一的5:00-5:59的每一分鐘
crontab的執行結果也會以郵件的形式發送到任務發起者的郵箱中。
注意:crontab命令使用-e選項進行編輯時,實際上就是編輯/var/spool/cron/USERNAME(當前用戶名)文件,以root為例:
但不要直接編輯此文件進行任務訂制,因為使用-e選項可以自動識別語法錯誤,而使用vim直接打開文件進行編輯則沒有此功能。
2、查看cron任務
3、為其它用戶定義cron任務
4、刪除所有的cron任務
如果想要只刪除某一條的任務,使用-e選項手動刪除即可。
5、cron的權限
與at一樣,cron也使用文件來定義用戶的使用權限;
/etc/cron.allow :寫入此文件的用戶可以使用crontab,沒有寫入的用戶則不可使用;
/etc/cron.deny :寫入此文件的用戶不可以使用crontab,沒有寫入的用戶則可以使用;
/etc/cron.allow比/etc/cron.deny的優先級要高,同一賬號在兩個文件中同時出現時,以/etc/cron.allow為準。
6、日志功能
cron執行的每一項任務都會被記錄到/var/log/cron這個日志文件。
anacron命令
檢查有沒有過去一個有效周期未曾執行的任務,如果有,在開機后的指定時間點執行一次;
查看anacrontab配置文件
配置文件中任務的四個值的含義:
period in days delay in minutes job-identifier command
過去沒執行的天數 開機后第多少分鐘數 工作名稱 任務
此命令在生產環境中基本用不到,此處不再進一步說明。
原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/1522
參考其它優秀博文優化下現有的格式,有些技巧會讓自己的博文更優美
@stanley:謝謝!