【发布时间】:2023-03-20 04:04:01
【问题描述】:
我正在运行一个大型 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,它会停止从while向 PHP 循环提供记录吗?如果发生错误,它会导致整个脚本崩溃吗?它是否有任何使整个脚本崩溃的超时?
如果这些都不适用,有什么方法可以记录脚本现在到底发生了什么?或者为什么会崩溃?有什么详细的记录方式吗?
更新:
我在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,可以这样吗?
P.S.: 我手动重启了几次服务器.. 但是这个说shutdown and halt ?
【问题讨论】:
-
您是否尝试检查 PHP、Apache 和 MySQL 日志?
-
@ualinker 是的,谢谢,我刚刚做了.. 问题已更新
-
Shutting down for system halt是机器本身关闭时写入系统日志的内核消息。这当然也会终止您的脚本。这很可能不是您要查找的错误 -
在这个文件(fastcgi.conf)中搜索并修改如下 Server type="application/x-httpd-php" CommandLine="C:\Program Files\Zend\bin\php -cgi.exe" ConnectionTimeout="60" RequestTimeout="60" StartProcesses="8" Impersonate="1" SetEnv="PHP_FCGI_MAX_REQUESTS=10000" SetEnv="PHP_FCGI_CHILDREN=1" SetEnv="PATH=?" SetEnv="TEMP=C:\Program Files\Zend\Core For Oracle\temp" SetEnv="PROCESSOR_IDINTITY=HPR92500212345" SetEnv="OS=?" SetEnv="SystemRoot=?" SetEnv="ComSpec=?" MinDynamicServers 8 MaxDynamicServers 16 IpcDir "C:\Program Files\Zend\temp"
-
服务器类型="application/x-httpd-php" CommandLine="C:\Program Files\Zend\bin\php-cgi.exe" ConnectionTimeout="60" RequestTimeout="60" StartProcesses ="8" Impersonate="1" SetEnv="PHP_FCGI_MAX_REQUESTS=10000" SetEnv="PHP_FCGI_CHILDREN=1" SetEnv="PATH=?" SetEnv="TEMP=C:\Program Files\Zend\Core For Oracle\temp" SetEnv="PROCESSOR_IDINTITY=HPR92500212345" SetEnv="OS=?" SetEnv="SystemRoot=?" SetEnv="ComSpec=?" MinDynamicServers 8 MaxDynamicServers 16 IpcDir "C:\Program Files\Zend\temp
标签: php mysql linux apache shell