我正在运行一个大的
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循环提供记录?如果发生错误,它会崩溃整个脚本吗?在崩溃整个脚本的任何事情上是否有任何超时?
如果没有一个可以应用它,有没有办法记录脚本现在正在发生什么?或者为什么会崩溃?记录所有内容的详细方法?
更新:
我在/ 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,这可能吗?
P.S.:我手动重启服务器几次..但是这个说关机并停止?