crontab 是Linux中配置定時任務的工具,在各種配置中,我們經常會看到除號(Slash)的使用,那么這個除號到底標示什么意思,使用中有哪些需要注意的地方呢?
在定時任務中,我們經常有這樣的需求,比如每5分鍾查看一下日志,我們可以這么寫:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /command
這樣肯定是沒有問題的,但是就寫書寫起來非常復雜,簡化一下可以這么寫:
0-55/5 * * * * /command
這樣的寫法已經簡化了很多,大家還是覺得麻煩,那么可以這樣寫:
*/5 * * * * /command
怎么樣,是不是非常簡單明了。這句就表示在0,5,10,15,20,25,30,35,40,45,50,55分鍾的時候執行命令,即每隔5分鍾執行命令。
由此我們得出除號與范圍搭配使用,表示命令執行的步長。
那么我下面這種寫法,是否標示每13分鍾執行一次命令呢?
*/13 * * * * /command
這里就是需要注意的地方。有一些步長是無法用這種方式表達的。只有能夠被整除的步長值才能表達與我們理解相一致確切的含義,對於分鍾來說只有 */2,*/3,*/4,*/5,*/6,*/10,*/12,*/15,*/30,對於小時來說則只有*/2,*/3,*/4,*/6,*/8,*/12。對於日期來說,如果使用*/5,則不能保證每5天執行一次,到月底的時候可能只執行1天、2天或3天后就停止了,這取決與大小月與平閏年。這是因為 cron 是沒有狀態的,它不能夠記錄上次執行的是什么時間,只能根據當前的時間來判斷是否需要執行。
而對於*/13這個例子來說,表示在分鍾這個范圍內,即0-59分鍾,任務會每13分鍾執行一次。即:0,13,26,39,52,之后再間隔8分鍾,就會又重新執行。
再看下面一個例子:
0 6 */2 * * /command
看到這個我們如果理解成每xx執行就是,每兩天的6點鍾執行命令。在這里*的范圍是1-31,*/2表示任務在奇數天執行,那么在1、3、5、7、8、10、12月,月末最后一天執行后,緊接着第二天仍然后執行,那這就不是每2天執行一次。
2、Man 5 crontab
3、
Wiki Cron