我正在运行一个 BIG PHP 脚本,它可能需要一整天才能完成它的工作,
这个脚本从 MySQL 数据库中获取数据并将其与 curl 一起使用来测试东西..它使用大约40,000条记录来完成它..
所以让它只要需要就在后台运行,我使用终端来执行它。在 PHP 脚本本身中,它具有这些设置,以确保它尽可能长时间地运行,直到它完成:
set_time_limit(0); // run without timeout limit
因为我从另一个单独的 PHP 脚本执行它,所以我使用这个函数
ignore_user_abort(1); // ignore my abort
因为直接从命令行执行它,它会给我两个选择..
1)等到脚本完成
2)取消整个过程
在搜索之后,有一篇文章给了我第三个选择,它通过创建一个外部 PHP 脚本来使用这个函数在后台执行主要的 BIG PHP 脚本,从而尽可能地在后台运行它:
exec("php bigfile.php");
这意味着我可以从浏览器正常打开此外部页面并无需担心退出它,因为ignore_user_abort
它将使其在后台运行..这仍然不是问题
问题是..在一段未知时期之后,脚本停止工作..我怎么知道?我告诉它在一个外部文件中写入它工作的每条记录的当前日期时间,所以我每次都刷新到那个外部页面,看看它是否停止更新,
在一段未知的时间之后,它实际上无缘无故地停止了,脚本没有说停止或任何东西..如果发生任何错误,我告诉它跳过记录(没有任何错误发生,它们都在同一行工作,如果一个工作,然后一切都应该工作)
但是,我的主要疑问如下:
- Apache有一个超时杀死它
- 这不是在后台执行 PHP 脚本的正确方法
- 在某个地方存在超时,无论是在 PHP 还是 Apache 或(MySQL!?)
这就是我最大的疑问所在。MySQL,它会停止向 PHP 循环提供记录while
吗?如果发生错误,它会导致整个脚本崩溃吗?它是否有任何使整个脚本崩溃的超时?
如果这些都不适用,有什么方法可以记录脚本现在到底发生了什么?或者为什么会崩溃?任何详细的方式来记录一切?
更新:
我在以下messages
文件中找到了这个/var/log/
:
Dec 29 16:29:56 i0sa shutdown[5609]: shutting down for system halt
Dec 29 16:30:14 i0sa exiting on signal 15
Dec 29 16:30:28 i0sa syslogd 1.5.0#6: restart.
Dec 29 16:50:28 i0sa -- MARK --
.....
Dec 29 18:50:31 i0sa -- MARK --
Dec 29 19:02:36 i0sa shutdown[3641]: shutting down for system halt
Dec 29 19:03:11 i0sa exiting on signal 15
Dec 29 19:03:48 i0sa syslogd 1.5.0#6: restart.
它说系统停止..我会尽量确保这可能是未来的崩溃和比赛时间,这可能是造成它的原因吗?为什么?memory_limit
是 128M 而我有2GB
服务器内存 ram,可能是这样吗?
PS:我手动重启了几次服务器..但是这个说shutdown and halt ?