【发布时间】:2017-10-16 22:36:00
【问题描述】:
我有一个生成大型 zip 文件的 PHP 脚本,当我通过 SSH 执行它时它可以工作,但是当通过 cron 执行时,相同的脚本间歇性失败。
我尝试过的事情:
- 更改脚本中的路径,但由于它是通过 SSH 执行的,所以应该不是问题
- 在 cron 命令中更改 PHP 可执行文件的路径(我运行“whereis php”并使用了 2 个可用的 PHP 可执行文件位置)
- 修改文件权限
- 将时间限制设置为 ini_set('max_execution_time', 990000); 并通过 set_time_limit (990000);
- 向托管公司提交了六张支持票,但他们无能为力
我现在尝试的最后一件事是手动设置一个时间限制,在此之后 cronjob 将失败,包括: /bin/timeout -s 2 990000 但我认为这没用,因为通常没有时间限制,除非我错过了什么。
日志文件显示,在我从类 ZipArchive 实例化一个对象并尝试执行 addFile 方法后,脚本失败。
这是我当前的 cron 命令:
30 4 * * * /bin/timeout -s 2 990000 /usr/bin/php /home/script.php > /tmp/script.log
感谢您的帮助。
【问题讨论】:
-
我会做:写日志看看脚本失败的地方。将限制设置为“无限制”(两个函数都为“0”)而不是值这么高。
-
您的 cron 的第一个调用是否可能与第二个 cron 作业重叠?
-
见 stackoverflow.com/a/36190095/2275490,这是 Codeigniter 框架的设置,但您可能会从中得到一些结论......
-
如果您知道它失败的地方,那么您是否尝试将 ZipArchive 作为间接路径?这通常会导致错误。这是一个测试,进入运行它的用户的主目录并输入 /usr/bin/php /home/script.php 看看你得到了什么
-
有两个原因,1)cron没有使用你的用户名,或者2)cron用户不能写入/tmp的目录权限问题