如何指示 cron 每两周执行一次作业?

新手上路,请多包涵

我想通过 cron 运行一项作业,该作业将在每个星期二的给定时间执行。因为每个星期二都很容易:

 0 6 * * Tue

但是如何在“每个第二个星期二”(或者如果您愿意 - 每个第二周)做到这一点?我不想在它自己的脚本中实现任何逻辑,但只在 cron 中保留定义。

原文由 tkokoszka 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

这个怎么样,它确实保留在 crontab 即使它没有在前五个字段中完全定义:

 0 6 * * Tue expr `date +\%W` \% 2 > /dev/null || /scripts/fortnightly.sh

原文由 xahtep 发布,翻译遵循 CC BY-SA 3.0 许可协议

回答

修改您的周二 cron 逻辑以 从 epoch 开始 每隔一周执行一次。

知道一周有 604800 秒(忽略 DST 变化和闰秒,谢谢),并使用 GNU 日期:

 0 6 * * Tue expr `date +\%s` / 604800 \% 2 >/dev/null || /scripts/fortnightly.sh

在旁边

日历算术令人沮丧。

@xahtep 的回答非常棒,但正如 @Doppelganger 在评论 中指出的那样,它会在某些年份范围内失败。 date 实用程序的“一年中的一周”说明符在这里都没有帮助。一月初的某个星期二不可避免地会重复上一年最后一个星期二的周平价:2016-01-05 (%V)、2018-01-02 (%U) 和 2019-01-01 (%W) .

原文由 pilcrow 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题