3

最近、PHP5-FPM、Gearman、Supervisorを使用してUbuntuNattyをセットアップしました。Gearmanワーカーを実行するようにSupervisord構成を編集しました。

[program:gearman] 
command=/usr/bin/php php_gearman_worker.php
numprocs=1 
directory=/root/sandbox
stdout_logfile=/root/sandbox/supervisord.log 
environment=GEARMAN_USER=gearman 
autostart=true
autorestart=true
user=gearman

lsof -i -Pスーパーバイザーを実行する前の関連情報(gearmandプロセスとphpプロセスのみを表示)は次のとおりです。

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand  29314  gearman    6u  IPv4 328139      0t0  TCP localhost:4730 (LISTEN)    

そして、これが私が私を追いかけたときに私が得るものlsof -i -Pです/etc/init.d/supervisor stop && /etc/init.d/supervisor start

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand  29314  gearman    6u  IPv4 328139      0t0  TCP localhost:4730 (LISTEN)
gearmand  29314  gearman   11u  IPv4 328206      0t0  TCP localhost:4730->localhost:39072 (ESTABLISHED)
php       29571  gearman    4u  IPv4 329744      0t0  TCP localhost:39072->localhost:4730 (ESTABLISHED)

監視対象自体のリストが表示されません。監視対象をコマンドの1つとして表示する必要がありますか?!

とにかく、私が停止して再開(または再起動)すると、監視対象は次のようになります。

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand  29314  gearman    6u  IPv4 328139      0t0  TCP localhost:4730 (LISTEN)
gearmand  29314  gearman   11u  IPv4 328206      0t0  TCP localhost:4730->localhost:39072 (ESTABLISHED)
gearmand  29314  gearman   12u  IPv4 329754      0t0  TCP localhost:4730->localhost:51570 (ESTABLISHED)
php       29571  gearman    4u  IPv4 329744      0t0  TCP localhost:39072->localhost:4730 (ESTABLISHED)
php       29619  gearman    4u  IPv4 327233      0t0  TCP localhost:51570->localhost:4730 (ESTABLISHED)

監視を停止して開始するたびに、別のphpプロセスが作成され、次に別のプロセスが作成されるようです。ギアマンドを再起動したときだけ、通常の状態に戻り/etc/init.d/gearman-job-server stop && /etc/init.d/gearman-job-server startます。

これは私には異常に思えます。私が監督をやめると、それはやめることになっているということです。

これは監視対象の動作方法ですか?!これを防ぐ方法はありますか?!

前もって感謝します。

編集

問題の原因を突き止めました。これは、supervisord.confおよび私のinitスクリプトとの小さな競合でした。

私のsupervisord.confファイルには次の設定がありました。

pidfile=/tmp/supervisord.pid

しかし、私のinitスクリプトに/etc/init.d/supervisordは次の設定がありました。

NAME=supervisord
PIDFILE=/var/run/$NAME.pid

そのため、supervisord.confの設定を、initスクリプトの設定と一致するように変更しました。

stopsignal=KILLまた、 supervisord構成ファイル(supervisord.conf)のプログラム構成に追加しました。

指示してくれたミナズに感謝します。

4

1 に答える 1

5

スーパーバイザー構成ファイルには、常にstopsignal構成オプションを含めます。これにより、停止が要求されたときにギアマンプロセスを強制終了できます。これを試して:

[program:gearman] 
command=/usr/bin/php php_gearman_worker.php
numprocs=1 
directory=/root/sandbox
stdout_logfile=/root/sandbox/supervisord.log 
environment=GEARMAN_USER=gearman 
autostart=true
autorestart=true
user=gearman
stopsignal=KILL
于 2011-11-26T16:42:04.463 に答える