我应该在 crontab 中使用 1,15 还是 */15 每 15 天运行一次命令?

elb*_*rna 11 cron

据我所知,crontab 有这些字段,从左到右开始。

1   minutes 0-59
2   hours 0-23
3   days of month 0-31
4   month 1-12
5   day of the week 0-6
6   command
Run Code Online (Sandbox Code Playgroud)

我想在 15:30 每 15 天运行一次 foo 命令这是正确的,因为当月的运行命令 1 和 15 有 30 天(31 天)所以每 15 天运行一次

30 15 1,15 * * /sbin/foo -a 1> /dev/null
Run Code Online (Sandbox Code Playgroud)

这个语法也正确吗?

30 15 */15 * * /sbin/foo -a 1> /dev/null
Run Code Online (Sandbox Code Playgroud)

系统是使用 Dillon Cron 的 Slackware Linux

tha*_*isp 15

此语法30 15 */15 * *是正确的,但它与 this 不同30 15 1,15 * *

后者将在月份1st15th月份执行命令,因为它具有固定的“月份日期”字段的逗号分隔值。

/定义的步骤,这意味着*/15将每一个执行15天,从启动1,这意味着:1st16th(对于所有个月),也31th(对具有31个天的任何一个月)。


如前所述man crontab(5),步长值可以与范围结合使用。因此,如果您想使用/可以执行的语法获得相同的结果:30 15 1-15/14 * *这意味着30 15 1,15 * *.

另一个例子,如果你想每 15 天运行一次,但在每个月的 5 日和 20 日运行:5-20/15. 当然,对于这种情况,写5,20. 但是将范围与步骤结合起来,可以定义范围执行的开始结束。

对于本月的第 1、3、5、7 天等: */2

对于本月的第 2、4、6、8 天等: 2-30/2

对于记录(0-59)和时间(0-23)中,第一有效值是0这样的:0 */2 * * *在装置00:0002:0004:00等。

  • 是的,对于分钟或小时,`*/n`(“红利”没有范围)将从 `0` 开始,因此它是 `n` 的倍数。对于 Day Of Month,其中 `1` 是第一个有效值,它从 1 开始,因此它是“n 的倍数”+1。 (3认同)