0

我目前遇到一个奇怪的问题,我创建了一个似乎每次都没有运行完成的大脚本。

详细地说,该脚本对数据库和 API 执行大量查询以更新我网站上的数据。它现在已经运行了几个星期,但在此之前和编写脚本时,如果连续多次(通常是 2 次)启动脚本将停止运行......有时。

所以问题不是很一致,但它是我网站的重要组成部分,我需要它每天在特定时间运行一次,以保持一切正常运行。

脚本本身不应该是问题。起初,我们必须解决它会收到超时的问题。超时是一个大问题,因为脚本可能需要一个小时才能完成。

我检查过的内容:

- 是否有任何 cronjob 干扰我的 cronjob? *据我所见。许多标准维护计划正在运行,但它们不应该引起任何问题吗?我们自己创建的其他 cronjob 没有运行,而有问题的 cronjob 运行。

- 我有足够的内存吗? * 几乎太多了。

- 脚本是否正常工作,这可能是您遇到问题的原因吗? * 可能是,但我不知道如何。我已经手动检查了脚本一百万次。

- 你打开日志了吗? * 我没有,这可能是个好主意,但我不知道要打开哪个日志。此外,我们过去曾遇到过错误报告问题,所以如果我打开它,恐怕它不会捕获任何东西。

我正在运行的内容: - 交钥匙 Linux

作为完成者,该脚本很难调试,大约需要一个小时才能完成,而且它永远不会停止在相同的代码上。

tl; dr:我应该如何调试似乎随机崩溃一段时间然后停止长时间崩溃的 cronjob?

编辑 感谢您的快速回复@Basile Starynkevitch:我们已经尝试过了,但它不会抛出任何错误,它只是停止。脚本中没有任何内容可能导致这种情况。

我认为我无法向您展示脚本的相关部分,它太大了。但这一切都归结为大量的查询和数据处理。

@fedorqui: cd /var/www/cronjobs/ && /usr/bin/php -q -f sc_distri_cronjob.php 它位于用于测试目的的公共文件夹中,但我认为它与我的问题无关。由于脚本长时间成功运行,我猜权限没问题?

@Flosculus:我们有一个锁,这引起了我们的注意。它运行“正常”一次,然后我们再次运行它,它告诉我们文件仍然被锁定,即使它停止运行。锁在最后被释放并且它不包含任何错误,脚本中没有任何东西可以故意阻止它运行。

4

1 回答 1

1

由于您的脚本非常大,它的运行时间可能比您的 php.ini 的 max_execution_time 更长。在足够长的时间内
尝试使用set_time_limit() 。
也许您还跟踪脚本平均运行多长时间并调整调用。

于 2013-08-09T09:40:14.740 回答