Cron
我如何告訴 cron 每隔一天執行一次命令(奇數/偶數)
當使用“Day of Month”欄位將 cron 配置為每隔一天執行一次命令時,如下所示:
1 22 */2 * * COMMAND
它在每個月的一天是奇數時執行:1、3、5、7、9 等等。
如何將 cron 配置為在一個月中的幾天執行,甚至像 2、6、8、10 等等(沒有從字面上指定它,這是有問題的,因為每個月都有不同的天數)?
您嘗試的語法實際上是模棱兩可的。根據一個月的天數,有些月份會在奇數天執行,有些則在偶數天執行。這是因為它的計算方式採用了可能性的總數並將它們分開。您可以通過手動指定日期範圍並使用奇數或偶數天來覆蓋這種策略性行為。由於偶數日腳本永遠不會在較長月份的第 31 天執行,因此使用 30 天作為偶數天的基礎不會失去任何內容,並且通過專門指定將其劃分為 31 天,您可以強制奇數- 日執行。
語法如下所示:
# Will only run on odd days: 0 0 1-31/2 * * command # Will only run on even days: 0 0 2-30/2 * * command
您對月份不具有相同天數的擔憂在這裡並不重要,因為沒有一個月比這更多的天數,而且對於糟糕的二月,日期範圍永遠不會匹配最後一兩天,但它不會造成傷害列出來。
這種方法的唯一“陷阱”是,如果您處於奇數天週期,那麼接下來的幾個月有 31 天,您的命令也將在該月的第一天執行。同樣,如果您強制使用偶數週期,則每個閏年將在 2 月底導致一個為期三天的周期。您無法真正繞過這樣一個事實,即“每隔一天”的任何正常模式並不總是會在每個月的偶數天或奇數天發生,並且以任何方式強制執行此操作,您要麼多跑一次,要麼錯過一次跑步天數不匹配的月份。