メモ

メモ

私は次のようにPHPファイルを実行しています。

nohup php server.php &

特定のポートをリッスンし、入力に従って操作を実行します。

問題は時々スクリプトが停止することです。私のサーバーは引き続きポートをリッスンしてサブプロセスを作成するため、cronジョブを使用してこの問題を解決することはできません。

server.php実行中であることを確認し、そうでない場合は開始する方法はありますか?

ベストアンサー1

check process を使用できますが、ps欠点の1つは、実行中のプロセスのインスタンスが複数ある場合、またはスクリプトが中断された場合にこの方法が決定的ではない可能性があることです。

私は実際にサーバーがポートでリッスンしていることを確認することを好みます。これを行ういくつかの方法は次のとおりです。たとえば、サーバーがポート2000でリッスンしている場合は、次の点を考慮してください。

使用lsof

lsof -i :2000; echo $?;

lsof開いているファイル記述子を調べており、プログラムがこのポートでリッスンしているのかアクティブに通信しているのかを確認する必要があります。0サーバーがポート 2000 で接続を受け入れると a がエコーされ、1そうでなければ a がエコーされます。

使用nc

nc -z -w1 192.168.1.12 2000 &> /dev/null; echo $?;

これはソケットサーバーをチェックするために私が好む方法です。ここでは、ゼロI / Oモードフラグをnc使用してポートをすばやくスキャンします。-zここでは、IPアドレスと正しいポートを使用できます。サーバーが接続を受け入れると、生活は良いです。

ここでも戻り値は0良いか1悪いです。我々は単に高速ブールチェックをしたいので、ここではすべての出力を削除します。ネットワークアドレスにアクセスできる場合、このメソッドは非常に迅速に返されます。サーバー自体で実行すると、自己通信しようとしたときに遅延がほとんど発生しません。

オートメーション

cron でこれらのテストを実行するには、bash スクリプトを生成し、コマンドの一方または両方を実行し、一連の論理チェックを実行します。失敗した場合は、スクリプトを再起動して再確認してください。私はこのような方法を数年間使用してきましたが、実際の稼働時間の点で非常に良い結果が得られました。

おすすめ記事