每 20 天安排一次工作

每 20 天安排一次工作

我想知道是否有更简单的方法可以每 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

这是我解决问题的方法

  1. cron从每日调用您的脚本
  2. 在脚本顶部附近检查状态文件以查看上次运行时间是否为 20 天或更长时间前
  3. 如果没有则退出
  4. 在脚本末尾更新状态文件以反映当前日期/时间

还有一些增强功能,例如捕获脚本启动时的日期/时间,但仅在脚本即将成功退出时记录它。对于长时间运行的流程特别重要,但对于只需要片刻运行的流程则不太重要。

我倾向于使用上次运行的状态文件,例如"$HOME/${0##*/}.lastran".写入date其中,但依赖于文件修改日期/时间而不是其内容。find "$stateFile" -mtime +19如果文件足够旧,将返回非空。

相关内容