如何设置crontab从当前日期开始每n天运行一次?

时间:2013-07-21 21:07:33

标签: cron crontab

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

如果我使用例如:

16 23 */7 * * COMMAND

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

我希望如果例如今天是10,则运行第10天,第17天,第24天等

任何想法?

3 个答案:

答案 0 :(得分:2)

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

如果您想在第10天,第17天,第24天运行,则可以写下10-31/7,或者如果您想在下个月从第3天开始循环,则可以写3-31/7

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

编辑:

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

为了达到你想要的效果,你可能需要将一个以各种方式运行的cron任务与一个快速测试结合起来,该测试检查你的参考日期有多远,类似于this idea on Unix.SE。 (您可以直接使用bash算法,而不必使用bc。)

答案 1 :(得分:0)

为什么crontab中没有多行?

即第n,第n + x,第n + 2x等。

复制'n'粘贴将是您的朋友。

答案 2 :(得分:0)

也许在(1)会是一个更好的选择,因为它已经支持像“现在+ 3天”这样的结构,意味着从现在起3天。

或者在脚本中编码逻辑以解析“日期”的输出 - 例如呼叫到目前为止+%d来查看每月的日期,并根据需要进行任何算术运算。

通用UNIX规则:如果你必须复制并粘贴很多,那你就错了:)