crontab的/在一个月运行在第一个星期日的cronjob

问题描述:

可能重复:
cron : how to schedule to run first Sunday of every monthcrontab的/在一个月运行在第一个星期日的cronjob

我想在早上7点在每月第一个星期日执行PHP脚本。我在服务器crontab中输入了以下行。

0 7 1-7 * 0  user /path/to/script.php 

今天我看到脚本在星期三早上运行。这怎么会发生?我认为最后的0定义了星期日?

感谢您的高级帮助。

从手册页:(8)当分钟,小时, 和当月同比领域的匹配当前时间,并在为期两天的 至少一个

命令是由cron执行字段(月中的某天或一周中的某一天)与当前的 时间相匹配(请参见下面的“注意”)。

及更高版本:

注意:命令的执行日可以由两个字段指定 - 天的月份,并星期几。如果两个字段都受到限制(即,不是*为 ),则当任一字段与当前的 时间匹配时,将运行该命令。例如,`30 4 1,15 * 5'将导致命令在每个月的1号和15号以及每个星期五的上午4点30分在上午4点30分运行。

换句话说,你的脚本运行在第1到第7以及任何星期天。

+0

这真的很不幸。 nnCron [显然](http://www.nncron.ru/help/EN/working/cron-format.htm)以预期的方式做到这一点(用AND):“'0 9 1-7 * 1 *第一个星期一每个月,早上9点,“但这对任何普通的unix系统都没有帮助。 – jwadsack 2017-01-04 23:36:28

字段3和5不像你所假设的一样工作。

您需要将字段5设置为*并修改您的php脚本以检查当前日期是否为星期日,然后继续。

你的cron规范出来这样:

0 - run at minute 0 
7 - run at hour 7 
1-7 - run on days 1,2,3,4,5,6,7 
* - all months 
0 - day 0 of the week 

我不相信你可以将其限制为只能通过在cron中的工具,第一类型的天。你可以尝试

0 7 * * 0 

which'd运行每个星期天,但有没有方法说“只有第一个星期天”,因此这将运行每个星期天。但是,您可以修改脚本以检查它正在运行的星期日,如果它不是第一个星期日,则可以退出。