Crontab中的除號(slash)到底怎么用?


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM