![PHP 快速 cgi (与 NGINX 结合使用) 暂停时冻结](https://linux22.com/image/499336/PHP%20%E5%BF%AB%E9%80%9F%20cgi%20(%E4%B8%8E%20NGINX%20%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8)%20%E6%9A%82%E5%81%9C%E6%97%B6%E5%86%BB%E7%BB%93.png)
我为 Web 开发设置了一个非常小的本地网络。Web 服务器是一堆
- MySql 5.1.37
- NGINX 0.8.19
- PHP 5.2.10 带有 Suhosin-Patch 0.9.7 和 Xdebug v2.0.4
服务器本身运行 ubuntu karmic 9.10。
为了向 NGINX 提供 PHP,我使用以下命令:
sudo /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
我的问题是,每天早上,当机器从挂起状态恢复时,PHP 已停止工作(在浏览器中,NGINX 在尝试加载请求的页面几秒钟后显示“网关错误”消息)。如果我尝试重新启动命令以重生 PHP,它会给我一个错误,说该地址已被使用。
编辑:更多信息
生成后,如果我运行,ps ax | grep php
就会得到一个php-cgi
正在运行的进程,而如果我从挂起状态恢复后重新发出命令,则不会得到任何结果,尽管如果我尝试重新生成,地址仍然会显示“正在使用”。我脑海中闪过的想法是,php-cgi 会向其他进程注册其存在,而这些进程不会检测到因挂起而突然死亡的 php-cgi,从而使地址保持繁忙状态。可能吗?!
有办法解决这个问题吗?我们欢迎使用优雅的解决方案,但即使是一个肮脏的解决方法,也可以让服务器在没有人为干预的情况下自行恢复。这只是几个人使用的内部生产服务器。
提前感谢您的时间!
答案1
也许你可以切换到php-fpm来自 spawn-fcgi?
答案2
Karmic 仍然使用 pm-utils,对吗?您需要一个脚本,在/etc/pm/sleep.d
服务器暂停时停止服务器,并在恢复时重新启动服务器。
示例脚本可能如下所示(根据需要调整暂停/恢复选项,但这应该会为您提供正确的脚本结构)。如果您已经编写了/etc/init.d/foo
在启动时启动服务器的脚本,则您可能希望使用该脚本来停止/启动下面的服务器。
#!/bin/sh
#
# /etc/pm/sleep.d/10spawnfcgi
case "$1" in
hibernate|suspend)
# example -- replace this with what works on your system
killall spawn-fcgi
# or better yet:
# /etc/init.d/myFcgiServer stop
;;
thaw|resume)
# restart -- tweak to your liking, rerun your startup script, etc
/usr/bin/spawn-fcgi -a 127.0.0.1 other-options-here
# or better yet:
# /etc/init.d/myFcgiServer start
;;
*) exit $NA
;;
esac
答案3
好的,经过几天的测试,我可以确认该问题可以通过定期升级自行解决。
如果您遇到同样的问题,如果您能够找出需要终止哪些进程才能“重置” fcgi 服务器,那么 ~quack 提供的解决方案似乎是合理的。
问题出现的软件版本不是不再显示:
- 核心:2.6.31-15-通用
- PHP的:5.2.10-2ubuntu6.3 带有 Suhosin-Patch 0.9.7 (cli)
- Nginx的:0.8.19