今天是 2016 年 11 月 1 日,或者用(明确的)数字表示,2016-11-01。
我有一个如下设置的用户 cron 作业:
# m h dom mon dow command
33 3 1 */2 * /home/user/...
它应该每隔一个月的第一天凌晨 3:33 运行一次,无论是星期几,但由于某种原因,它今天运行了,尽管 11 不能被 2 整除。
有人能解释一下吗?我对 2 的整除性的假设是错误的吗?
编辑:我忘了提一下,我cron
在 Debian 8.6“Jessie”机器上运行版本“3.0pl1-127+deb8u1”。
答案1
不是/
一个算术表达式,而是描述的“步长值”。允许值的范围。因此,由于月份总是以1
而不是开头0
,因此/2
意味着“取其他每个值”,结果为 (1, 3, 5, 7, 9, 11)。
手册页中也对此进行了描述,尽管这并不那么清晰易懂:
步长值可以与范围结合使用。范围后面跟有“<number>”表示跳过该范围内的数字值。例如,可以在小时字段中使用“0-23/2”来指定每隔一小时执行一次命令(V7 标准中的替代方案是“0,2,4,6,8,10,12,14,16,18,20,22”)。星号后面也可以使用步长,因此如果您想表示“每两小时”,只需使用“*/2”即可。
答案2
今天是十一月的第一天。
*/2 表示你的 cronjob 将按照你所说的每隔一个月执行一次。
因此下个月(12 月) cronjob 将不会执行,但再下个月(1 月)将会执行。
这个月之前的一个月(十月)cronjob 没有被执行。但是九月份它被执行了。