1.什麼是定時任務
通過定時讓系統在規定的時間去執行任務。
2.定時任務的種類:at和cron
定時任務有兩種工作方式:一是例行性的,就是每隔一定的週期就要執行一次的任務,使用at來實現;二是突發性的,就是執行完一次就不再執行的任務,使用crontab實現。
3.at單次執行任務的運作方式
使用at來執行任務時,一種方式是將任務以文字檔案的方式寫入/var/spool/at/目錄下,就可以等待atd服務的呼叫和執行了;第二種是使用at命令,進入到at shell環境執行所需的命令。
對於at,可以使用/etc/at.allow和/etc/at.deny這兩個檔案來進行at的使用限制。有了這兩個檔案的情況下,at的工作情況如下:
先尋找/etc/at.allow檔案,寫在這個檔案中的使用者才能使用at,否則不能(即使在at.deny檔案中沒有寫)。
如果/etc/at.allow不存在,就尋找/etc/at.deny檔案,寫在這個檔案中的使用者不能使用at,沒有被解除安裝檔案中的使用者可以使用at。
如果兩個檔案都不存在,則只有root可以使用at。
4.at的使用方式
#at [-mldv] time
#at -c 工作號
選項與引數:
-m:當at的工作完成後,即使沒有輸出資訊,也通過email通知使用者。
-l:at -l相當於atq,列出當前系統上的所有使用者的at任務。
-d:at -d相當於atrm,可以取消乙個在at中的任務。
-v:可以使用較明顯的時間格式列出at任務的任務表。
-c:可以列出後邊接的該項任務的實際指令內容。
time:時間格式,可以定義出【什麼時候要進行at任務】的時間,格式有:
示例:讓系統在10分鐘後關機
#at now + 10 minutes (注意單位要加s,使用at時會進入下邊的at shell的環境來讓使用者下達命令,建議命令中路徑使用絕對路徑。)
at> /bin/sync
at> /bin/sync
at> /sbin/shutdown -h now
at> (此處輸入[ctrl]+d就會出現的字樣,表示結束。)
job 1 at tue mar 31 15:54:00 2020 (此處會顯示剛剛輸入的指令編號和執行時間)
5.指令的刪除
atq:查詢當前主機上有多少的at任務。
atrm+任務號:指定移除任務。
6.crontab週期性執行任務的運作方式
週期執行任務是由cron(crond)服務來控制的。
對於週期性執行任務,使用的則是crontab命令。
對於crontab,同樣可以使用/etc/cron.allow和/etc/cron.deny這兩個檔案來進行crontab的使用限制。有了這兩個檔案的情況下,crontab的工作情況如下:
先尋找/etc/cron.allow檔案,寫在這個檔案中的使用者才能使用crontab,否則不能(即使在cron.deny檔案中沒有寫)。
如果/etc/cron.allow不存在,就尋找/etc/cron.deny檔案,寫在這個檔案中的使用者不能使用crontab,沒有被解除安裝檔案中的使用者可以使用crontab。
如果兩個檔案都不存在,則只有root可以使用crontab。
當使用者使用crontab命令建立任務後,任務就會被記錄到/var/spool/cron/中,並且以賬號來作為判別的。
7.crontab的使用方式
#crontab [-u username] [-l|-e|-r]
選項和引數:
-u:只有root才能進行這個任務,也可幫助其他使用者建立或刪除crontab任務
-e:編輯crontab的任務內容
-l:檢視crontab的任務內容
例項:用root的身份在每天的12:00發信給自己
#crontab -e (使用此命令時也可以不需要指定身份,即不需要加root欄位)
0 12 * * * mail -s "at 12:00" root < /home/root/.bashrc
每項任務的格式都具有六個字段,分別的意義為:
代表意義
分鐘小時
日期月份周指令
數字範圍
0-59
0-23
1-31
1-12
0-7實際指令
特別注意周的數字中的0和7都是代表星期天的意思
另外還有一些輔助的字元,意義如下:
特殊字元
代表意義
*表示任何時刻都接受的意思,舉例日,月,週都是*的話就代表不論何月何日的星期幾都執行。*同樣可以使用表1中的數字範圍來表示,意義相同。
,表示分割時段的意思,舉例任務時間是每天的3點和6點,則表示為0 3,6 * * * command
-表示一段時間範圍內,舉例8點到12點之間的每小時的20分鐘都執行一次任務,則表示為 20 8-12 * * * command
/nn代表數字,表示[每隔n單位間隔]的意思,舉例每5分鐘執行一次任務,則表示為*/5 * * * * command
8.crontab的系統配置檔案
配置檔案中的引數解釋:
mailto=root 當/etc/crontab檔案中的任務指令發生錯誤時,或者該任務的執行結果有stdout/stderr時,會將錯誤資訊或者螢幕顯示的資訊傳給誰。
path=*** 執行檔案的搜尋路徑。
[分 時 日 月 周 身份 指令]欄位的設定 在/etc/crontab需要指定身份。
9.crond服務讀取配置檔案的位置
一般情況下,crond預設有三個地方會有執行指令碼的配置檔案,分別是:
10.可喚醒停機期間的工作任務anacron
什麼是anacron:
anacron不是用來取代crontab的,而是用來處理在系統非啟動狀態下的crontab任務執行的,以及因為某些原因導致的超時而沒有沒執行的任務。
anacron也是每小時被cron執行一次的,然後anacron再去檢測相關的任務有沒有被執行,如果有超時的工作在,就執行任務,執行完畢或無需執行任務時,anacron就停止了。
anacron是怎麼在停機的狀態下還能夠執行任務的?anacron會讀取時間記錄檔案,會去分析現在的時間和時間記錄檔案所記載的上次執行anacron的時間,如果兩者有差異,則在某些時刻沒有進行crontab,此時anacron會開始執行未進行的crontab任務了。
anacro和/etc/anacrontab:
anacron其實是程式而非服務,在centos當中已經進入crontab的任務中,同時anacronb會每小時被執行一次,並且anacron的配置檔案放在了/etc/cron.hourly中。
anacron的語法如下:
#anacron [-sfn] [job]
#anacron -u [job]
選項和引數:
-s:開始連續的執行各項工作(job),會一句時間記錄檔案的資料判斷是否進行。
-f:強制進行,而不去判斷時間記錄檔案的時間戳。
-n:立刻進行未進行的任務,而不延遲(delay)等待時間。
-u:僅更新時間記錄檔案的時間戳,不進行任何操作。
job:由/etc/anacrontab定義的各項工作名稱。
anacron的配置檔案:/etc/anacrontab
random_delay=45 #隨機給予最大延遲時間,單位是分鐘
start_hours_range=3-22 #延遲多少個小時內應該要執行的任務時間
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
對於第乙個任務,示例具體的執行流程如下:
由/etc/anacrontab分析到cron.daily這項工作名稱的天數為1天。
由/var/spool/anacron/cron.daily取出最近一次執行anacron的時間戳。
由上個步驟與目前的時間比較,若差異天數為1天以上(含1天),就準備執行指令。
若準備執行指令,根據/etc/anacrontab的設定,將延遲5分鐘+3小時(由start_hours_range設定)。
延遲時間後,開始執行後續指令,即[run-parts /etc/cron.daily]指令。
執行完畢後,anacron程式結束。
Linux linux定時任務crontab
crontab命令的功能是在一定的時間間隔排程一些命令的執行。它的配置檔案是 etc crontab。vim etc crontab etc crontab中每行指定乙個定時任務,其描述格式如下 minute hour daymonth dayofweek commandminute 從0到59的整...
linux定時任務 at定時任務
at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...
linux定時任務
crontab 設定定時任務 crontab 可以根據分鐘 小時 日期 月份 星期的組合來設定定時任務的自動執行 要使用該服務必須啟動 crond 服務,檢視 crond 服務有沒有啟動,執行命令 servicecrond status 一些任務事例,幫助理解 3020 root back.sh 每...