PHP的快速CGI(与NGINX一起使用)冻结暂停

我为web开发build立了一个非常小的本地networking。 networking服务器是一堆

  • MySql 5.1.37
  • NGINX 0.8.19
  • 带有Suhosin-Patch 0.9.7和Xdebug v2.0.4的PHP 5.2.10

服务器本身运行Ubuntu的业力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 ps ax | grep php我得到一个php-cgi进程运行,而如果我从暂停恢复后重新发出命令,我什么也没有得到,虽然地址仍然会导致“使用”,如果我尝试重新产卵。 我脑海中浮现的想法是,php-cgi注册了一些其他的进程,并没有检测到与暂停的突然死亡php-cgi,保持地址繁忙。 是真的吗?!

任何想法如何解决这个问题? 一个优雅的解决scheme是最受欢迎的,但即使是一个肮脏的解决方法,使服务器可以自我恢复而无需人工干预是可以的。 这只是几个人使用的内部生产服务器。

预先感谢您的时间!

也许你可以从spawn-fcgi切换到php-fpm ?

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 

好的,经过几天的testing,我可以确认问题本身解决了定期升级。

如果你遇到同样的问题,如果你能够找出哪些进程需要被杀死,以便“重置”fcgi服务器,那么由庸医提供的解决scheme似乎是合理的。

问题不再显示的软件版本:

  • 内核: 2.6.31-15-通用
  • PHP: 5.2.10-2ubuntu6.3 Suhosin-Patch 0.9.7(cli)
  • Nginx: 0.8.19