閱讀完 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