web-dev-qa-db-ja.com

PHP fast cgi(NGINXと組み合わせて使用​​)サスペンド時にフリーズ

Web開発用に非常に小さなローカルネットワークを設定しました。 Webサーバーはのスタックです

  • MySql 5.1.37
  • NGINX 0.8.19
  • PHP5.2.10とSuhosin-Patch0.9.7およびXdebugv2.0.4

サーバー自体はubuntukarmic9.10を実行します。

PHPをNGINXに提供するには、次のコマンドを使用します。

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
mac

さて、数日間のテストの後、定期的なアップグレードで問題が自然に解決したことを確認できます。

同じ問題が発生した場合、fcgiサーバーを「リセット」するためにどのプロセスを強制終了する必要があるかを見つけることができれば、〜quackによって提供される解決策は賢明なもののようです。

問題が発生するソフトウェアバージョンnot表示されなくなりました:

  • カーネル: 2.6.31-15-汎用
  • PHP: 5.2.10-2ubuntu6.3 with Suhosin-パッチ0.9.7(cli)
  • Nginx: 0.8.19
0
mac

たぶん、spawn-fcgiから php-fpm に切り替えることができますか?

1
SaveTheRbtz

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
1
quack quixote