我想知道是否有更简单的方法可以每 20 天运行一次作业。在cron作业中,如果指定day参数为*/20
,则只会在每个月的20号运行,IE基本上变成每月运行一次。
诀窍来自每 25 分钟执行一次 CronJob工作几分钟,但恐怕不能应用到一天,除非我每天运行 cron 作业来检查。
这将是我最后的手段,但我想知道是否有更好/更聪明的方法来做到这一点。
更多信息
这是为了更新目的,因此可以在 20 天之内完成。但我是通过笔记本电脑进行操作的,笔记本电脑大部分时间都处于睡眠状态。因此保证执行是必须的(我读到 cron 缺乏这一点)。
答案1
每 20 天运行一次脚本的唯一可能方法是每天运行它cron
并签入脚本(如果距年初的天数确认了您的要求)。类似的东西可以完成这项工作:
if [ $( expr $(date +%j) % 20) -ne 0 ]
then exit # days do not divide to 20 w/o remainder
fi
#your script here
答案2
这是我解决问题的方法
cron
从每日调用您的脚本- 在脚本顶部附近检查状态文件以查看上次运行时间是否为 20 天或更长时间前
- 如果没有则退出
- 在脚本末尾更新状态文件以反映当前日期/时间
还有一些增强功能,例如捕获脚本启动时的日期/时间,但仅在脚本即将成功退出时记录它。对于长时间运行的流程特别重要,但对于只需要片刻运行的流程则不太重要。
我倾向于使用上次运行的状态文件,例如"$HOME/${0##*/}.lastran"
.写入date
其中,但依赖于文件修改日期/时间而不是其内容。find "$stateFile" -mtime +19
如果文件足够旧,将返回非空。