停止失敗

現象:

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拡張機能に対応する環境変数を設定しておらず、起動時に余分なフォークプロセスが発生し、停止に失敗する可能性があります。