当前位置:  开发笔记 > 编程语言 > 正文

如何指导cron每两周执行一次工作?

如何解决《如何指导cron每两周执行一次工作?》经验,为你挑选了3个好方法。

我想通过cron运行一个工作,这个工作将在每天的特定时间每两周执行一次.每周二都很容易:

0 6 * * Tue

但是如何在"每隔一个星期二"(或者如果你愿意 - 每隔一周)制作它?我不想在它自己的脚本中实现任何逻辑,但只保留在cron中的定义.



1> pilcrow..:

回答

修改您的星期二cron逻辑,以便自纪元以来每隔一周执行一次.

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

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

在旁边

日历算术很令人沮丧.

@ xahtep的答案非常棒,但正如@Doppelganger在评论中指出的那样,它会在某些年份的界限上失败.该date实用程序的"一年中的一周"说明符都不能在这里提供帮助.1月初的某个星期二将不可避免地重复前一年最后一个星期二的周平价:2016-01-05(%V),2018-01-02(%U)和2019-01-01(%W) .



2> xahtep..:

怎么样,crontab即使它没有在前五个字段中精确定义,它确实保持在它:

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


我的猜测是这个解决方案在一年的最后一周有问题.有时一年的最后一个星期五是第51周,有些时候是第52周.所以这可能会让你连续两周或三周一次

3> 小智..:

pilcrow的答案很棒.然而,这导致每运行fortnightly.sh脚本甚至一周(自纪元).如果您需要在奇数周运行脚本,您可以稍微调整一下他的答案:

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

将1更改为0会将其移回甚至数周.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有