Cronjob在预定时间之前运行,这可能是什么问题?


10

我将crontab安排在19-23日之间的周六,我不确定为什么它在20日(周五)运行。有什么猜想吗?

00 21 19-23 * 6 <command>

1
您可能会/etc/cron.d/mdadm在Ubuntu和Debian上使用中发现一些启发。这是每个月的第一个星期日的运行方式:57 0 * * 0 root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi
kasperd 2015年

感谢kasperd,0 18 * * 6 [date +\%d -le 07] && <task> 对我来说运作良好,必须在每个月的第一个星期六运行。
simer 2015年

Answers:


16

该Cron表达式翻译为:

At 21:00 on the 19, 20, 21, 22 and 23rd of every month and every Saturday.

因此,它明确要求cron在20日星期五运行。这是因为:

When the schedule specifies both date and weekday, they're combined with a logical OR,
i.e. the job will run if current_minute == scheduled_minute 
&& current_hour == scheduled_hour && current_month == scheduled_month && 
(current_day == scheduled_date OR current_weekday == scheduled_weekday).

此信息来自此方便的Cron工具:http : //crontab.guru/

为了使您的工作在周六的特定日期运行,您可以使用:

00 21 19-23 * * test $(date +%u) -eq 6 && command

此解决方案来自于crontab是星期几还是一个月几号?


6
当心%在cronjobs 中有特殊含义–它分隔了命令的标准输入。
user1686
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.