1. 程式人生 > >crontab每小時執行一次

crontab每小時執行一次

先給出crontab的語法格式

對於網上很多給出的每小時定時任務寫法,可以說絕大多數都是錯誤的!比如對於下面的這種寫法:

00 *   * * *  #每隔一小時執行一次
00 */1 * * *  #與上面是相同的任務

這種是正確的嗎?對照最前面給出的語法格式來看,這個定時任務在0分、每小時、每天、每月、每星期執行,看起來似乎很合理啊?前一個小時的0分和後一個小時的0分不就是相隔一個小時嗎?這樣的話不就是每隔一個小時執行嗎?再仔細看看,好像有點不對勁,為什麼是每小時的0分?如果我在11:55建立了定時任務,希望每小時執行一次,那麼接下來這個定時任務是在12:55執行,還是在12:00執行?很顯然,它是每小時的0分執行,也就是在12:00執行。

似乎沒區別?那麼請思考下,每隔3小時執行如何寫?

網上給出的寫法如下:

0 */3 * * * #錯誤的每隔3小時執行一次寫法

這種也是錯誤的寫法,這種能充分展示前面一小時執行一次帶來的迷惑感,這種寫法其實是每整3小時的0分執行一次。也就是說,它會在每天的3點、9點、12點...等3的整數倍時間點來執行,並不是真正意義上每隔3個小時執行,如同前面類似,如果你在11:56建立這種每3小時的定時任務,那麼它會在12點就開始執行,而不是14:56執行。請看如下驗證:

11:56分建立上面所謂的“每3小時執行一次”的定時任務:

4分鐘後而不是3小時後,crontab執行了該定時任務:

事實上,對於這種 "0 */3 * * * " 這種分鐘時間點固定,小時按每小時或者每3小時的寫法,都是從1點開始算倍數,比如每一小時就是1點、2點、3點,而每2小時就是2點、4點、6點,每3小時就是3點、6點、9點等等,以此類推。

除此之外,網上還有人給出這種的每小時執行一次的定時任務寫法:

* */1 * * * #錯誤的每隔一小時執行一次,事實上每分鐘執行一次

這種比前面那種還不如,它壓根不是每小時執行,而是每分鐘執行!為什麼?因為分鐘要求的是每分鐘執行,而小時卻要求每一個小時執行,這2個分明是衝突的時間策略。最終以分鐘為準,所以它是每分鐘執行一次。

真正的每隔一小時、每隔105分鐘執行的定時任務應該如何寫呢?如下:

*/60  * * * * #每60分鐘即每小時執行一次
*/105 * * * * #每105分鐘執行一次