だから私はこの種の問題について 少数その他 スレッドを見つけましたが、それらの解決策は私のために働いていません。
基本的に、これは私の開発マシンであり、セットアップは数週間問題ありませんでしたが、突然、これらのエラーで多くの問題が発生しました。
[Thu Sep 27 16:28:43 2012] [error] [client 127.0.0.1] FastCGI: comm with server "/Library/WebServer/Documents/php5.external" aborted: idle timeout (60 sec)
[Thu Sep 27 16:28:43 2012] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "/Library/WebServer/Documents/php5.external"
サーバー構成に関連するものは何も変更していません。明らかに何かが変わったに違いない、さもないと私は運が悪かった。
セットアップは次のとおりです。
Apache/2.2.22 (Unix) DAV/2 mod_fastcgi/2.4.6 mod_ssl/2.2.22 OpenSSL/0.9.8r
$ php-fpm -v
PHP 5.3.15 (fpm-fcgi) (built: Aug 19 2012 09:06:12)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans
$ Sudo lsof -i TCP:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 97167 _www 6u IPv4 0xd65451f140772337 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 97174 _www 0u IPv4 0xd65451f140772337 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 97174 _www 3u IPv4 0xd65451f14739c337 0t0 TCP localhost:cslistener->localhost:54750 (CLOSE_WAIT)
$ tail -16 /etc/Apache2/httpd.conf
<IfModule mod_fastcgi.c>
FastCGIExternalServer /Library/WebServer/Documents/php5.external -flush -Host 127.0.0.1:9000 -idle-timeout 60
AddHandler php5-fcgi .php
Action php5-fcgi /usr/lib/cgi-bin/php5.external
Alias /usr/lib/cgi-bin/ /Library/WebServer/Documents/
<Directory /usr/local/sbin>
Options ExecCGI FollowSymLinks
SetHandler fastcgi-script
Order allow,deny
Allow from all
AllowOverride All
</Directory>
</IfModule>
これは、ログの場所が変更されたデフォルトのphp-fpm.confであり、オンデマンドプロセスマネージャーはpm.max_children = 1であり、その他はすべてデフォルトです。
私はApacheを何十回も再起動し、すべてのphp-fpmプロセスを異なる順序で強制終了しようとしました。
どんな提案も大いに奨励され、歓迎され、感謝され、試され、そして期待されます。
更新2012年9月28日
さて、私は this チュートリアルを使用し、ソケットアプローチを試して、それがTCPポートの衝突であるかどうかを確認しました-そうではないことがわかりました。ソケットを使用しても役に立ちませんでした次のような10秒ごとのエラーメッセージ:
TCPの場合:
[28-Sep-2012 08:44:58] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
[28-Sep-2012 08:44:58] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
[28-Sep-2012 08:44:58] ERROR: FPM initialization failed
[28-Sep-2012 08:44:58] ERROR: FPM initialization failed
ソケットの場合:
[28-Sep-2012 08:48:32] ERROR: An another FPM instance seems to already listen on /tmp/php5-fpm.sock
[28-Sep-2012 08:48:32] ERROR: An another FPM instance seems to already listen on /tmp/php5-fpm.sock
[28-Sep-2012 08:48:32] ERROR: FPM initialization failed
[28-Sep-2012 08:48:32] ERROR: FPM initialization failed
私はこれを解決する方法を理解しました、そしてそれは私がちょうどリンクしたチュートリアルにあります。起動エージェントのplist構成では、RunOnlyOnceを指定する必要があります。ただし、これがTCPにとって安全かどうかはわかりません。
ただし、ある程度の進歩があり、この質問が具体的になりすぎる可能性があります。開発にNetBeansを使用しており、xdebugを使用してデバッグセッションを起動しようとすると、正常に読み込まれます。ブレークポイント、私は正方形1に戻っています。comm with server ... aborted: idle timeout
すべてのベースをカバーするために、httpd.confの-idle-timeoutを300に設定しました。サイコロはありません。 Netbeansをシャットダウンし、デバッグセッションを開始しようとしない場合、サーバーは停止せず、意図したとおりに動作します。
MacBookを再起動しようとしていますが、正直なところ、それは有効な解決策ではありません。
だから、私は他の誰も持っていないので、これについてコメントしたほうがいいと思いました。
TCP経由でリッスンしているときに、PHP-FPMがバインディングエラーを何度もログに記録しないようにする方法がわかりません。
UNIXソケットリスニングに切り替え、起動時にPHP-FPMを1回だけ実行するように起動エージェントを構成することで、問題を解決しました。
私にできる最善のこと。多分これは誰か、idkを助けるでしょう。
php-fpm.conf
listen = /tmp/php5-fpm.sock
httpd.conf
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /Library/WebServer/CGI-Executables/php-fcgi
FastCGIExternalServer /Library/WebServer/CGI-Executables/php-fcgi -socket /tmp/php5-fpm.sock -pass-header Authorization -idle-timeout 300
<Directory /usr/local/sbin>
Options ExecCGI FollowSymLinks
SetHandler fastcgi-script
Order allow,deny
Allow from all
AllowOverride All
</Directory>
</IfModule>
/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>homebrew-php.josegonzalez.php53</string>
<key>LaunchOnlyOnce</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/Cellar/php53/5.3.15/sbin/php-fpm</string>
<string>--fpm-config</string>
<string>/usr/local/etc/php/5.3/php-fpm.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>Username</key>
<string>www</string>
<key>WorkingDirectory</key>
<string>/usr/local/var</string>
<key>StandardErrorPath</key>
<string>/usr/local/Cellar/php53/5.3.15/var/log/php-fpm.log</string>
</dict>
</plist>
プロジェクトでls-lAを実行し、自分がどのユーザーでグループ化されているかを確認します。 php-fpm5.6の場合はphp-fpm.conf
を、php7。*バージョンの場合はwww.conf
を編集します。
私の場合、ユーザー= vallabhおよびグループ=スタッフ
そしてlisten = 127.0.0.1:9071とlisten = 127.0.0.1:9056を更新します
ポートを覚えるのはとても便利で簡単です。
幸せなコーディング。
以下のシェルコードを使用して、ポートをバインドしていることを確認します。
lsof -Pni4 | grep LISTEN | grep php