Cron

間隔 cron 什麼時候第一次執行?(例如:*/3 天)

  • August 1, 2020

tl;dr:cron 是否使用間隔的數值與當天的數值比較來確定其執行時間,還是在創建的規定時間從字面上“每 3 天”?

問題:

如果我添加以下作業,crontab -e它將在明天午夜第一次執行還是從明天起三天執行?還是僅在每月的“第三”天?第 1 天、第 4 天、第 7 天、第 10 天……?

0 0 */3 * * /home/user/script.sh

我昨天把這個 cron 放到今天早上執行(這可能是我問題的答案),但我想驗證這是正確的。今天是第 31 天,該區間值似乎確實屬於該序列。如果 cron 在本月 1 日開始執行間隔,明天會再次執行嗎?

補充說明:

總的來說,已經有一些關於 cron的優秀文章和資源(這是我知道的一個常見主題),但是特定時間間隔的起點對我來說並不那麼清楚。多個來源以多種方式表達它:

Cron 還支持“步驟”值。dom 欄位中的 */2 值表示命令每兩天執行一次,同樣,小時欄位中的 */5 表示命令每 5 小時執行一次。

  • 那麼每兩天的真正含義是什麼?
  • 這個答案指出,一個 cronjob0 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/2or的情況下返回的值*/2是 1,3,5,7.. 等。這也意味著當範圍執行時將重置為起始值。

所以你也是正確的,在這種情況下,cronjob 將在下個月的 31 日和 1 日執行。

請注意,cron 有 2 個相互排斥的欄位——“月中的日”和“周中的日”。因此,在以天為間隔執行作業時,您必須選擇其中一個。

如果要定義一個每隔一天完美執行的 cronjob,則必須使用多行並根據目前日曆自定義每個月。

引用自:https://unix.stackexchange.com/questions/602216