2016-05-16 10 views
1

linuxコマンドnohup php filename.php &を使用して、バックグラウンドのPHPプロセスを作成しています。ここでの問題は、filename.phpに含まれるファイルやファイル自体に変更があった場合、現在のプロセスを強制終了して再開する必要があることです。これを防ぐ方法はありますか?私のアプリケーションでは、(プロセスを強制終了して再起動するために)ダウンタイムが必要ないので、コードの更新に再起動する必要はありません。これを回避する方法が他にない場合は、誰かが代替アプローチを提案しますか?適切なPHPバックグラウンドプロセスを作成するには?

EDIT 1

私は、メインプロセス間の通信のためZeroMQを使用していますが、このバックグラウンドプロセス。バックグラウンドプロセスは特定のTCPポート、たとえば555にバインドされます。新しいプロセスを開始しようとすると、同じポートにバインドしようとすると、ポートがすでに使用中であるため、エラーが発生します。そして、私は新しいプロセスを開始する前にプロセスを終了させる必要があります。

EDIT 2

サンプルコードと私の完全な問題の中に、DEPT説明については私の他のquestionを確認してください。

+0

古いプロセスを強制終了する前に、修正されたコードで新しいプロセスを開始してください。その仕事は – RiggsFolly

+0

@RiggsFolly私はメインプロセスとこのバックグラウンドプロセス間の通信にZeroMQを使用しています。バックグラウンドプロセスは特定のTCPポート、たとえば555にバインドされます。新しいプロセスを開始しようとすると、同じポートにバインドしようとすると、ポートがすでに使用中であるため、エラーが発生します。そして、私は新しいプロセスを開始する前にプロセスを終了させる必要があります。 –

+0

PHPスクリプトは、実行開始時に一度読み込まれます。これを回避する方法はないようです。バックグラウンドプロセスが定数ループの場合、ループ内のコードを別のファイルに分けて、 'exec'や' shell_exec'を介してそのファイルを呼び出すことができます。これにより、スクリプトは各繰り返しでスクリプトを再ロードします。 – apokryfos

答えて

1

スクリプトが実行されている間、あなたはあなたのコードを更新することはできません。 PHPはApacheで実行してもこれを実行しません。しかし、PHPが新しいリクエストを開始する前に、コードをリロードする必要があるかどうかをチェックします。

パフォーマンスが大きな問題ではない場合。あなたは何か似たようなことをすることができる。メインスクリプト(それほど変更する必要はありません)を待ち行列で待ち受けます。また、2番目のスクリプトを実行するためにproc_openを使用して2番目のスクリプトを開始し、パイプを介してデータをシリアル化します。今度は2番目のスクリプトが使用されると、リクエストごとにリロードされます。

関連する問題