据我所知 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
我想每 15 天在 15:30 运行 foo 命令 这是正确的,因为运行命令 1 和 15 的月份有 30 天(31 天),所以每 15 天运行一次
30 15 1,15 * * /sbin/foo -a 1> /dev/null
这个语法也正确吗?
30 15 */15 * * /sbin/foo -a 1> /dev/null
系统是 Slackware Linux,使用 Dillon Cron
答案1
这个语法30 15 */15 * *
是正确的,但它与 this 的作用不同30 15 1,15 * *
。
后者将在本月1st
和15th
每月执行命令,因为它为“每月的日期”字段提供了固定的逗号分隔值。
定义/
的步骤,这意味着将从 开始每天*/15
执行,这意味着:,(对于所有月份)以及(对于任何有 31 天的月份)。15
1
1st
16th
31th
如前所述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
对于 Minutes( 0-59
) 和 Hours( 0-23
),第一个有效值0
如下:0 */2 * * *
表示 at 00:00
、02:00
等04:00
。