阅读完 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 schedular 的参考
https://stackoverflow.com/questions/8699075/how-to-set-cron-job-for-every-45-days