Cron 作業每 45 天執行一次可能嗎? (約1個半月)

Cron 作業每 45 天執行一次可能嗎? (約1個半月)

閱讀完 crontab 文件後,我想不出一種方法來表示以下時間表:每 45 天執行一次腳本。

有誰知道優雅的解決方案?謝謝。

答案1

由於 45 天的時間段不能很好地劃分為公曆的周、月或年,因此無法限制腳本運行的日期並仍然讓它在您想要的所有日期執行。

因此,您需要每天執行命令,並在每 45 天中的 44 天中讓命令本身返回而不執行任何操作。

例如,如果您希望腳本在 03:17 運行,則命令可能如下所示:

17 3 * * * /usr/local/bin/your-script

在腳本中你可以這樣做:

#!/bin/bash
if [[ $[($(date +%s)/86400)%45] != 0 ]]
then
    return
fi

real things happen here

!= 0部件可以使用不同的編號,具體取決於您希望其首次運行的日期。您可以選擇將額外的邏輯放在 crontab 中而不是放在腳本中,儘管我個人認為在腳本中執行此操作更具可讀性。

請注意,如果您的時區使用 DST,您可能需要調整上述內容,以避免在調整時鐘時時間表變更。確切的詳細資訊取決於您選擇執行腳本的時區和時間。

答案2

您可能需要使用兩個 cronjob 條目,第一個是一個月,第二個是 45 天

每個月使用低於 cron 的時間

0 0 1 * *  your_script

以及這個 cron 條目的 45 天

10 13 * * *  test $(( `date +\%s`/24/60/60\%45 )) = 41 && your_script

我從下面的連結獲得了 45 天 cron 計劃的參考

https://stackoverflow.com/questions/8699075/how-to-set-cron-job-for-every-45-days

相關內容