私は、着信ソケット要求などをリッスンするPHPスクリプトを用意しています。このスクリプトをサーバー上で継続的に実行する必要があります(無限ループ内で実行されます)。永続的なPHPスクリプトを実行し続けるには?
どのようにこのプロセスを開始して管理できますか?私はSSH /パテを介して起動してみましたが、SSH接続がタイムアウトするとすぐにスクリプトは消えます。
私は、着信ソケット要求などをリッスンするPHPスクリプトを用意しています。このスクリプトをサーバー上で継続的に実行する必要があります(無限ループ内で実行されます)。永続的なPHPスクリプトを実行し続けるには?
どのようにこのプロセスを開始して管理できますか?私はSSH /パテを介して起動してみましたが、SSH接続がタイムアウトするとすぐにスクリプトは消えます。
ここで説明したようにSSH経由でバックグラウンドでスクリプトを実行します。Getting ssh to execute a command in the background on target machine
Iだろうその後、スクリプトがまだ実行されているかどうかを監視する方法を持ってお勧めします。あなたはあなたのスクリプトがポートでリッスンしていると述べたが、ポートがまだ開かれているかどうかを毎回確認するスクリプトを書くことができる。
もう1つの方法は、プロセスIDを監視することです。スクリプトが最初に実行されると、getmypid
関数を使用してプロセスIDを取得し、ファイルに格納することができます。 ps -p 1234
を使用して、実行中であるかどうか定期的に確認できます。
なぜdo-while文ではありませんか? do { /* your code */ } while $something == 0;
次に何かがスクリプトの停止をトリガするために起こると、セット$ 0
私は ' $ something = 0; 'は代入であり、true/falseテストではありません;) しかし、私はあなたがそれを知っていたと確信しています..もう一つのことは、何らかの理由でブロックされていますが、 'アイドル'がアイドル状態になることはありませんが、サーバ全体または少なくとも仮想サーバ全体のスコープ上で貴重なリソースを無駄にしてしまいます。 – Tore
以外の値に何かあなたがそれをコマンドラインを実行することができます。システムがスクリプトが完了するのを待たないようにするには、「バックグラウンドで実行」修飾子を追加する必要があります。基本的には、コマンドラインの最後に&を置きます。
あなたが間違いなく行うべきことの1つは、再起動の際に起動時にPHPスクリプトを実行するiniシェルスクリプトを作成することです。 PHPスクリプトから実行するために
を使用している場合我々は最近、同様の必要性を持っていたブラウザを使用することができます。 Ubuntu 14.04 LTSサーバーを実行しているため、起動時にプロセスを開始するためのプロセスが作成され、何らかの理由で終了した場合は再起動されます(upstart
)。
これは、自動再起動を含めて非常にうまく機能しています。私たちの長期的なプロセスは最終的にMySQL接続を失います。スクリプトは例外を処理して終了し、upstart
プロセスが自動的にプロセスを再起動します。また、upstart
が再試行を断念する大きなエラーがある場合に備えて、プロセスを監視するためにcron
スクリプトを追加しました。シンプルな再起動で以前のエラーが修正されない場合は、フェイルセーフが発生します。
これは私の最初の選択でもあります。 – musicliftsme
デュアルプロセスとして[PHPスクリプトを実行する]の可能な複製(http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process) –
たくさんの良い情報:http:// stackoverflow .com/search?q = php +デーモン –
あなたのセッションをsshから切り離すために "screen"ユーティリティもチェックしてください(そして、必要ならば後で再接続してください) – regilero