1

我想在 cronjob 中每 n 天运行一个命令,但从当天开始

如果我使用例如:

16 23 */7 * * COMMAND

COMMAND每个月在第 0 天、第 7 天、第 14 天、第 21 天、第 28 天第 16 分钟、第 23 小时运行。

我想如果例如今天是 10 号,运行第 10 天、第 17 天、第 24 天等

有任何想法吗 ?

4

3 回答 3

2

*/7不会在每个月的第 0、7、14、21、28 天运行,而是在 1、8、15、22、29 天运行(一个月中的天数从 1 开始)。

如果你想在第 10 天、第 17 天、第 24 天运行,你可以写10-31/7,或者3-31/7如果你想从第 3 天循环回来,在下个月。

(我建议将每周参数用于每 7 天运行一次的东西可能更有意义,因为否则它可能会在月底以不同的时间间隔运行。)

编辑:

重新阅读该问题时,似乎仅靠cron其本身不足以实现您所追求的目标。一般来说,没有办法表达您想要的模式(每 n 天),因为它总是来自一个月中的特定日期,并且一个月中的最后一次出现和第一次出现之间可能少于 n 天下个月。唯一的例外是每周模式,在这种情况下,您可以指定“星期几”字段而不是“月份中的日期”字段。

为了实现您想要的,您可能需要将运行各种方式的 cron 任务与检查您与参考日期的距离的快速测试相结合,类似于Unix.SE 上的这个想法。(您可能可以直接使用 bash 算术,而不必使用bc.)

于 2013-07-21T21:13:48.347 回答
0

为什么 crontab 中没有多行?

即第n个、第n个+x、第n个+2x等。

复制“n”粘贴将成为您的朋友。

于 2013-07-21T21:12:12.290 回答
0

也许 at(1) 会是一个更好的选择,因为它已经支持像“now + 3 days”这样的结构来表示从现在开始的 3 天。

或者在您的脚本中编码逻辑以解析“日期”的输出 - 例如调用 date +%d 以查看月份的日期,然后执行您想要的任何算术运算。

但是一般的 UNIX 规则:如果你必须复制和粘贴很多,那么你做错了 :)

于 2013-07-21T21:17:00.763 回答