間隔 cron 什麼時候第一次執行?(例如:*/3 天)
tl;dr:cron 是否使用間隔的數值與當天的數值比較來確定其執行時間,還是在創建的規定時間從字面上“每 3 天”?
問題:
如果我添加以下作業,
crontab -e
它將在明天午夜第一次執行還是從明天起三天執行?還是僅在每月的“第三”天?第 1 天、第 4 天、第 7 天、第 10 天……?
0 0 */3 * * /home/user/script.sh
我昨天把這個 cron 放到今天早上執行(這可能是我問題的答案),但我想驗證這是正確的。今天是第 31 天,該區間值似乎確實屬於該序列。如果 cron 在本月 1 日開始執行間隔,明天會再次執行嗎?
補充說明:
總的來說,已經有一些關於 cron的優秀文章和資源(這是我知道的一個常見主題),但是特定時間間隔的起點對我來說並不那麼清楚。多個來源以多種方式表達它:
- 這個unixgeeks.org文章指出:
Cron 還支持“步驟”值。dom 欄位中的 */2 值表示命令每兩天執行一次,同樣,小時欄位中的 */5 表示命令每 5 小時執行一次。
- 那麼每兩天的真正含義是什麼?
這個答案指出,一個 cronjob
0 0 */2 * *
將“在每個奇數日的 00:00 執行(步驟 2 的預設範圍,即 1,3,5,7,…,31)”
- cron 是否總是從每月的第一天開始?
- 看來該部落格指出 cron 將在 31 日執行,然後在下個月的 1 日再次執行(因此連續兩天),因為時間間隔基於當天的數值。
此部落格文章中的另一個範例
0 1 1 */2 * command to be executed
應該在每月的第一天,每兩個月凌晨 1 點執行- 這是否意味著 cron 將執行 1、3、5、7、9、11 個月?
看來 cron 被設計為
*/3
根據間隔的數值與天(或秒、分、小時、月)的數值相比來執行間隔 cronjobs ( )。這是 100% 正確的嗎?PS這是一個關於 cron 的一個特定功能的非常具體的問題,(我相信)需要一些澄清。這應該讓 Google 可以 100% 確定地告訴您,您的“每 3 個月”的 cron 在添加到 crontab 後第一次執行的時間。
crontab(5) 手冊頁使用了非常明確的措辭:
步長值可以與範圍結合使用。使用“/number”跟隨範圍指定在該範圍內跳過數字的值。例如,可以在小時欄位中使用“0-23/2”來指定每隔一小時執行一次命令(V7 標準中的替代方案是“0,2,4,6,8,10,12,14,16 ,18,20,22")。星號後面也允許有步驟,所以如果你想說“每兩個小時”,只需使用“*/2”。
確切的措辭(和範例)是“跳過範圍內的數字值”-暗示它從範圍中的第一個數字開始。
這意味著如果範圍是
1-31
天,則在1-31/2
or的情況下返回的值*/2
是 1,3,5,7.. 等。這也意味著當範圍執行時將重置為起始值。所以你也是正確的,在這種情況下,cronjob 將在下個月的 31 日和 1 日執行。
請注意,cron 有 2 個相互排斥的欄位——“月中的日”和“周中的日”。因此,在以天為間隔執行作業時,您必須選擇其中一個。
如果要定義一個每隔一天完美執行的 cronjob,則必須使用多行並根據目前日曆自定義每個月。