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


Crontab / Running cronjob on first sunday in month

可能重复:
cron:如何安排运行每个月的第一个星期日

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

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

今天我看到剧本确实在周三早上运行。这怎么可能发生?我以为最后一个0定义了星期天?

提前感谢您的帮助。

来自手册页:

命令由cron(8)执行,和年中的月份字段与当前时间匹配,并且当两天字段(月日或周日)与当前字段匹配时间(请参阅下面的"备注")。

以及更高版本:

注意:命令执行的日期可以由两个字段指定--月份的日期和星期的日期。如果两个字段都受到限制(即不是*),当任一字段与当前字段匹配时,将运行该命令时间例如,"30 4 1,15*5"会导致命令在每月1日和15日凌晨4:30,加上每周五。

换句话说,你的剧本在1号到7号以及任何一个星期天运行。

字段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

它会在每周日运行,但没有办法说"只有第一个周日",所以它会在每个周日运行。但是,您可以修改您的脚本,以检查它在哪个星期天运行,如果不是第一个星期天,只需退出即可。