Linux 定時任務(crontab)

2021-10-04 15:08:48 字數 4347 閱讀 3229

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 每...