Crontab / 在每月第一个星期日运行cron任务

4

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

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

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

今天我发现脚本在周三早上运行了。这是怎么回事?我以为最后一个0表示星期天?

提前感谢您的帮助。

3个回答

9

来自man页面的内容:

当分钟、小时和年份月份字段与当前时间匹配,且两个日期字段(日期或星期几)中至少有一个与当前时间匹配时(请参见“注意”),命令将由cron(8)执行。

然后:

注意:可以通过两个字段指定命令执行的日期——月份日期和星期几。如果两个字段都受限制(即不是*),则命令将在任何一个字段与当前时间匹配时运行。例如,“30 4 1,15 * 5”将导致命令在每月的第一天和第15天以及每个星期五早上4:30运行。

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


真的很不幸。nnCron(显然)以期望的方式执行此操作(使用AND):“0 9 1-7 * 1 *每月第一个星期一,上午9点”,但这对于任何通用的Unix系统都没有什么帮助。 - jwadsack

2

第三个和第五个字段不能像你想象的那样一起使用。

你需要将第五个字段设置为 *,并修改你的php脚本,在继续之前检查当前是否是星期天。


2
您的 cron 规范如下:

您的 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

这个脚本将在每个星期日运行,但是没有方法可以只运行“第一个星期日”,因此它会在每个星期日运行。不过,您可以修改脚本以检查它正在运行的星期日,并在不是第一个星期日时退出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接