克伦每15分钟就要重试一次工作

我在crontab中有一个Amazon Linux AMI:

0 7 * * 1 root /usr/bin/wget -q http://localhost/digest_weekly.php -O - >> /var/log/digest_weekly.log 

这在每个星期一上午7点调用脚本digest_weekly.php 。 该脚本从数据库收集一些数据,并向每个用户发送一封电子邮件。 它将返回它发送电子邮件的所有电子邮件地址的列表。 今天它必须发送2608封电子邮件。 该脚本需要一段时间才能执行,但在日志中看不到超时错误。

问题是邮件每15分钟再发一次。 /var/log/digest_weekly.log是空的,所以我想这个工作并没有完成,而且cron在给它一些时间之后再次启动它。 我在Apache访问日志中看到这个:

 127.0.0.1 - - [23/May/2016:07:00:01 +0000] "GET /digest_weekly.php HTTP/1.1" 200 70941 "-" "Wget/1.16.1 (linux-gnu)" 127.0.0.1 - - [23/May/2016:07:15:02 +0000] "GET /digest_weekly.php HTTP/1.1" 200 70941 "-" "Wget/1.16.1 (linux-gnu)" 127.0.0.1 - - [23/May/2016:07:30:04 +0000] "GET /digest_weekly.php HTTP/1.1" 200 70917 "-" "Wget/1.16.1 (linux-gnu)" 

但是在/var/log/cron我只能看到一行:

 May 30 07:00:01 ip-172-31-8-62 CROND[8104]: (root) CMD (/usr/bin/wget -q http://localhost/digest_weekly.php -O - >> /var/log/synkratos/digest_weekly.log) 

其他cron作业执行得很好(每小时,每天)。

为什么这个cron工作重复? 上周它被执行4次,今天9(直到我杀了任务)。

这不是一个cron问题,而是在达到900秒的默认超时后重新启动下载:

--read-timeout=seconds将读取(和写入)超时设置为秒。 这个超时的“时间”是指空闲时间:如果在下载的任何时间点没有收到超过指定秒数的数据,读取失败,下载重新开始。 该选项不会直接影响整个下载的持续时间。
当然,远程服务器可能会select比此选项更快地终止连接。 默认的读取超时时间是900秒。

不要通过调用Web服务器来执行PHP脚本,而应该从命令行PHP解释器运行脚本,即:

 0 7 * * 1 root /usr/bin/php /path/to/digest_weekly.php >> /var/log/digest_weekly.log 

你确定它真的是cron(至less是那一行)谁发送请求? 最快的检查方法是:注释掉该行并稍后检查cron日志。

也许还有另一个时间表。