cron 作业重复运行,为什么?

cron 作业重复运行,为什么?

为什么这个 cron 作业会在一段时间内重复执行,我该怎么做才能停止它?

我有一个 cron 作业,应该每天早上 4 点运行。它会触发一个 php 脚本,执行一些日常数据分析,在正常情况下运行一次(大约需要 2-3 分钟才能完成)然后退出。它一直在工作,但最近它在服务器崩溃时运行失控。我调查并发现了以下内容。crontab 条目如下所示:

* 4 * * * /usr/bin/wget -q -O /dev/null 'http://123.456.78.90/index/thing?param=1'

在我的日志文件中我看到:

123.456.78.90 - - [28/Nov/2012:04:00:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:04:01:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:04:02:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
// and then later it ends with (note that it isn't trying every minute now)
123.456.78.90 - - [28/Nov/2012:05:28:09 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:05:29:36 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:05:29:00 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:06:06:51 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:06:06:53 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"

为什么会显示这样的重复运行?是不是因为没有达到目标所以继续尝试?非常感谢任何帮助,因为多次运行对我来说是新鲜事。

答案1

看起来你每天第四个小时的每一分钟都在运行它。因此,60 个 wget 副本被启动。

* 4 * * * .....

然后他们会花很长时间。如果要运行 60 份副本,那么可能要花很长时间,这也解释了为什么有些请求要几个小时才能完成。

如果您确实希望它只在凌晨 4 点运行一次,那么使用:

0 4 * * * .....

答案2

如果您希望 wget 每天凌晨 4 点运行,我建议您将您的 cron 作业更改为如下所示:

0 4 * * * /usr/bin/wget -q -O /dev/null 'http://123.456.78.90/index/thing?param=1'

http://www.adminschoice.com/crontab-quick-reference

我建议先修复该问题,如果问题仍然存在,再报告。谢谢。

答案3

http://www.gnu.org/software/wget/manual/wget.html

Wget 的设计旨在适应缓慢或不稳定的网络连接;如果由于网络问题导致下载失败,它会不断重试,直到检索到整个文件。如果服务器支持重新获取,它会指示服务器从上次中断的地方继续下载。

我怀疑它超时了(默认是 900 秒)并正在重新尝试。

相关内容