2011-01-17 10 views
8

私は、着信ソケット要求などをリッスンするPHPスクリプトを用意しています。このスクリプトをサーバー上で継続的に実行する必要があります(無限ループ内で実行されます)。永続的なPHPスクリプトを実行し続けるには?

どのようにこのプロセスを開始して管理できますか?私はSSH /パテを介して起動してみましたが、SSH接続がタイムアウトするとすぐにスクリプトは消えます。

+4

デュアルプロセスとして[PHPスクリプトを実行する]の可能な複製(http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process) –

+2

たくさんの良い情報:http:// stackoverflow .com/search?q = php +デーモン –

+1

あなたのセッションをsshから切り離すために "screen"ユーティリティもチェックしてください(そして、必要ならば後で再接続してください) – regilero

答えて

6
myscript.php & 

これは、あなたが以下のコメントで述べた

ps aux | grep myscript.php 

Patrickたようでそれを確認することができます背景

をscriptin実行されますが、何の最大実行時間がありませんコマンドライン。 myscript.phpは無限に実行されます。

+0

これを 'set_time_limit'で上書きすることができます。 –

+4

コマンドラインから実行すると時間制限はありません – Patrick

+0

@パトリックは知っていてよかった! – ActionOwl

2

ここで説明したようにSSH経由でバックグラウンドでスクリプトを実行します。Getting ssh to execute a command in the background on target machine

Iだろうその後、スクリプトがまだ実行されているかどうかを監視する方法を持ってお勧めします。あなたはあなたのスクリプトがポートでリッスンしていると述べたが、ポートがまだ開かれているかどうかを毎回確認するスクリプトを書くことができる。

もう1つの方法は、プロセスIDを監視することです。スクリプトが最初に実行されると、getmypid関数を使用してプロセスIDを取得し、ファイルに格納することができます。 ps -p 1234を使用して、実行中であるかどうか定期的に確認できます。

別の解決策:How to check if a php script is still running

-1

なぜdo-while文ではありませんか? do { /* your code */ } while $something == 0;

次に何かがスクリプトの停止をトリガするために起こると、セット$ 0

+1

私は ' $ something = 0; 'は代入であり、true/falseテストではありません;) しかし、私はあなたがそれを知っていたと確信しています..もう一つのことは、何らかの理由でブロックされていますが、 'アイドル'がアイドル状態になることはありませんが、サーバ全体または少なくとも仮想サーバ全体のスコープ上で貴重なリソースを無駄にしてしまいます。 – Tore

0

以外の値に何かあなたがそれをコマンドラインを実行することができます。システムがスクリプトが完了するのを待たないようにするには、「バックグラウンドで実行」修飾子を追加する必要があります。基本的には、コマンドラインの最後に&を置きます。

あなたが間違いなく行うべきことの1つは、再起動の際に起動時にPHPスクリプトを実行するiniシェルスクリプトを作成することです。 PHPスクリプトから実行するために

1

を使用している場合我々は最近、同様の必要性を持っていたブラウザを使用することができます。 Ubuntu 14.04 LTSサーバーを実行しているため、起動時にプロセスを開始するためのプロセスが作成され、何らかの理由で終了した場合は再起動されます(upstart)。

これは、自動再起動を含めて非常にうまく機能しています。私たちの長期的なプロセスは最終的にMySQL接続を失います。スクリプトは例外を処理して終了し、upstartプロセスが自動的にプロセスを再起動します。また、upstartが再試行を断念する大きなエラーがある場合に備えて、プロセスを監視するためにcronスクリプトを追加しました。シンプルな再起動で以前のエラーが修正されない場合は、フェイルセーフが発生します。

+0

これは私の最初の選択でもあります。 – musicliftsme