定時任務crontab

2021-07-16 21:00:27 字數 2498 閱讀 2432

前言

crontab是unix和linux用於設定週期性被執行的指令,是網際網路很常用的技術,很多任務都會設定在crontab迴圈執行,如果不使用crontab,那麼任務就是常駐程式,這對你的程式要求比較高,乙個要求你的程式是24x7小時不宕機,乙個是 要求你的排程程式比較可靠,實際工作中,90%的程式都沒有必要花這麼多時間和精力去解決上面的兩個問題的,只需要寫好自己的業務邏輯,通過crond這 個工業級程式去排程就行了,crond的可靠性,健壯性,大家應該是毫無疑問的。

crontab的格式講解

每項工作 (每行) 的格式都是具有六個字段,這六個欄位的意義為:

代表意義

分鐘小時

日期(天)月份周

命令數字範圍

0-59

0-23

1-31

1-12

0-7呀就命令啊

比較有趣的是那個『周』喔!周的數字為 0

或 7時,都代表『星期天』的意思!另外, 還有一些輔助的字元,大概有底下這些:

特殊字元

代表意義

*(星號)

代表任何時刻都接受的意思!舉例來說,範例一內那個日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續命令』的意思!

,(逗號)

代表分隔時段的意思。舉例來說,如果要下達的工作是 3:00 與 6:00 時,就會是:

0 3,6 * * * command

時間引數還是有五欄,不過第二欄是 3,6 ,代表 3 與 6 都適用! 

-(減號)

代表一段時間範圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都進行一項工作:

20 8-12 * * * command

仔細看到第二欄變成 8-12 喔!代表 8,9,10,11,12 都適用的意思!

/n(斜線)

那個 n 代表數字,亦即是『每隔 n 單位間隔』的意思,例如每五分鐘進行一次,則:

*/5 * * * * command

很簡單吧!用 * 與 /5 來搭配,也可以寫成 0-59/5 ,相同意思!

周與日月不可同時並存

另乙個需要注意的地方在於:『你可以分別以周或者是日月為單位作為迴圈,但你不可使用「幾月幾號且為星期幾」的模式工作』。 這個意思是說,你不可以這樣編寫乙個工作排程:

130 12 11 9 5 rootecho"just test"<==這是錯誤的寫法

本來你以為九月十一號且為星期五才會進行這項工作,無奈的是,系統可能會判定每個星期五作一次,或每年的 9 月 11 號分別進行,如此一來與你當初的規劃就不一樣了~所以羅,得要注意這個地方!上述的寫法是不對的!

centos下檢視crontab執行歷史記錄

在crontab中新增了定時任務,但發現沒有得到期望的結果,因而懷疑是crontab沒有執行相應的任務,但怎麼定位crontab是否執行呢?

這就需要檢視crontab的執行歷史記錄,具體位置如下:

1cd/var/log

2tail-100cron

在cron檔案中即可查閱已經操作過的相關定時任務。

第1列表示分鐘1~59 每分鐘用*或者 */1表示

第2列表示小時1~23(0表示0點)

第3列表示日期1~31

第4列表示月份1~12

第5列標識號星期0~6(0表示星期天)

第6列要執行的命令

* * * * * mycommand

3,15 * * * * mycommand

3,15 8-11 * * * mycommand

3,15 8-11 */2  *  * mycommand

3,15 8-11 * * 1 mycommand

30 21 * * * /etc/init.d/smb restart

45 4 1,10,22 * * /etc/init.d/smb restart

10 1 * * 6,0 /etc/init.d/smb restart

0,30 18-23 * * * /etc/init.d/smb restart

0 23 * * 6 /etc/init.d/smb restart

* */1 * * * /etc/init.d/smb restart

* 23-7/1 * * * /etc/init.d/smb restart

crontab定時任務

今天工作項有個任務是讓ubuntu定時執行某個指令碼,對postgresql資料庫進行定時備份。linux 系統都有個cron定時任務的機制。今天做些筆記,以便日後翻查。注意 cron機制是有個使用者系統的概念的,即分系統cron和使用者cron,每個使用者所執行的cron任務可能不同。1.以roo...

crontab定時任務

基本格式 command 分 時 日 月 周 命令 第1列表示分鐘1 59 每分鐘用 或者 1表示 第2列表示小時1 23 0表示0點 第3列表示日期1 31 第4列表示月份1 12 第5列標識號星期0 6 0表示星期天 第6列要執行的命令 我的需求是定時備份mongodb 編寫任務執行的指令碼ba...

Crontab定時任務

我們可以使用crontab執行一些週期任務 crontab u user file crontab u user 將file做為crontab的任務列表檔案並載入crontab 編輯crontab檔案內容 顯示crontab檔案內容 刪除載入後的crontab檔案內容 每分鐘向使用者目錄下的log....