我想通过 cron 运行一项作业,该作业将在每个星期二的给定时间执行。因为每个星期二都很容易:
0 6 * * Tue
但是如何在“每个第二个星期二”(或者如果您愿意 - 每个第二周)做到这一点?我不想在它自己的脚本中实现任何逻辑,但只在 cron 中保留定义。
原文由 tkokoszka 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想通过 cron 运行一项作业,该作业将在每个星期二的给定时间执行。因为每个星期二都很容易:
0 6 * * Tue
但是如何在“每个第二个星期二”(或者如果您愿意 - 每个第二周)做到这一点?我不想在它自己的脚本中实现任何逻辑,但只在 cron 中保留定义。
原文由 tkokoszka 发布,翻译遵循 CC BY-SA 4.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 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答784 阅读✓ 已解决
2 回答3.2k 阅读
这个怎么样,它确实保留在
crontab
即使它没有在前五个字段中完全定义: