停止失敗
現象:
php start.php stop
を実行すると stop fail
と表示される
第一の可能性
Workermanをデバッグモードで起動しており、開発者がctrl z
を送信しSIGSTOP
シグナルでWorkermanをバックグラウンドに移行して中断したため、stopコマンド(SIGINT
シグナル)によって応答できなくなった可能性があります。
解決方法:
Workermanを起動したターミナルでfg
と入力して(SIGCONT
シグナルを送信)、Enterキーを押してWorkermanをフォアグラウンドで実行し、ctrl c
(SIGINT
シグナルを送信)でWorkermanを停止します。
停止できない場合、以下の2つのコマンドを試します
killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
第二の可能性
stopを実行するユーザーとWorkermanを起動するユーザーが異なる場合、つまりstopユーザーにWorkermanを停止する権限がない可能性があります。
解決方法:
Workermanを起動したユーザーに切り替えるか、権限の高いユーザーでWorkermanを停止します。
第三の可能性
Workermanのメインプロセスのpidファイルが削除されたため、スクリプトがpidプロセスを見つけることができず、停止が失敗しました。
解決方法:
pidファイルを安全な場所に保存し、マニュアルWorker::$pidFileを参照してください。
第四の可能性
Workermanのメインプロセスのpidファイルに対応するプロセスがWorkermanプロセスではない可能性があります。
解決方法:
Workermanのメインプロセスのpidファイルを開き、メインプロセスのpidを確認し、pidファイルはデフォルトでWorkermanと同じディレクトリにあります。次に、コマンドps aux | grep メインプロセスのpid
を実行して対応するプロセスがWorkermanプロセスであるかどうかを確認します。そうでない場合、おそらくサーバーが再起動したため、Workermanが保存したpidが期限切れで、他のプロセスに使用されて停止が失敗した可能性があります。この場合は、pidファイルを削除してください。
第五の可能性
grpc拡張機能をインストールしたが、grpc拡張機能に対応する環境変数を設定しておらず、起動時に余分なフォークプロセスが発生し、停止に失敗する可能性があります。