https://blog.csdn.net/liu0808/article/details/80668705.net
先給出crontab的語法格式3d
對於網上不少給出的每小時定時任務寫法,能夠說絕大多數都是錯誤的!好比對於下面的這種寫法:code
00 * * * * #每隔一小時執行一次 00 */1 * * * #與上面是相同的任務
這種是正確的嗎?對照最前面給出的語法格式來看,這個定時任務在0分、每小時、天天、每個月、每星期執行,看起來彷佛很合理啊?前一個小時的0分和後一個小時的0分不就是相隔一個小時嗎?這樣的話不就是每隔一個小時執行嗎?再仔細看看,好像有點不對勁,爲何是每小時的0分?若是我在11:55建立了定時任務,但願每小時執行一次,那麼接下來這個定時任務是在12:55執行,仍是在12:00執行?很顯然,它是每小時的0分執行,也就是在12:00執行。blog
彷佛沒區別?那麼請思考下,每隔3小時執行如何寫?crontab
網上給出的寫法以下:get
0 */3 * * * #錯誤的每隔3小時執行一次寫法
這種也是錯誤的寫法,這種能充分展現前面一小時執行一次帶來的迷惑感,這種寫法實際上是每整3小時的0分執行一次。也就是說,它會在天天的3點、9點、12點...等3的整數倍時間點來執行,並非真正意義上每隔3個小時執行,如同前面相似,若是你在11:56建立這種每3小時的定時任務,那麼它會在12點就開始執行,而不是14:56執行。請看以下驗證:class
11:56分建立上面所謂的「每3小時執行一次」的定時任務:定時任務
4分鐘後而不是3小時後,crontab執行了該定時任務:語法
事實上,對於這種 "0 */3 * * * " 這種分鐘時間點固定,小時按每小時或者每3小時的寫法,都是從1點開始算倍數,好比每一小時就是1點、2點、3點,而每2小時就是2點、4點、6點,每3小時就是3點、6點、9點等等,以此類推。im
除此以外,網上還有人給出這種的每小時執行一次的定時任務寫法:
* */1 * * * #錯誤的每隔一小時執行一次,事實上每分鐘執行一次
這種比前面那種還不如,它壓根不是每小時執行,而是每分鐘執行!爲何?由於分鐘要求的是每分鐘執行,而小時卻要求每個小時執行,這2個分明是衝突的時間策略。最終以分鐘爲準,因此它是每分鐘執行一次。
真正的每隔一小時、每隔105分鐘執行的定時任務應該如何寫呢?以下:
*/60 * * * * #每60分鐘即每小時執行一次 */105 * * * * #每105分鐘執行一次