2016-07-15 15 views
2

私のCodeigniterベースのPHPアプリケーションで、Node jsアプリケーションとZeroMqを使用しています。プロセスが起動していないかどうかを確認してください。

私の管理ダッシュボードでは、ソケットが動作しているかどうか、またノードjsアプリケーションが実行中であるかどうかを確認できます。それがダウンしている場合、私はそれをオンラインに戻すことができる必要があります。

私はphpのexecをオンラインに戻すのに使うことができると知っていますが、スクリプトが終了するとすぐにコマンドラインも終了します。

どうすればこの問題を解決できますか?

ラチェット:ステータスがオンライン(ストップ、スタート、再起動) ノードサービス:ような何かステータスオンライン(ストップ、スタート、再起動) ZeroMq:ステータスがオンライン(ストップ、スタート、再起動)

+1

はあなたが 'によって何を意味するのか明確にすることができますが、すぐにスクリプト仕上げとして、そのコマンドはexecのような何かを実行する場合、私は、意味 – KFE

+0

line.'ん( "node main.js"); それを開いて閉じます。また、私は実行するかどうかを制御する方法を知らない –

答えて

0

私が試しましたfsockopen()を含む多くのソリューションが、ポートが開いているかどうかをチェックします。

しかし、唯一の解決策は、ノードjsアプリケーションプロセスがアプリケーションファイルの引数でオンになっているかどうかを確認することです。そうでない場合は、execを使用して永久に(&引数で)実行し、出力をログファイル(ノードアプリケーションの同じフォルダー)に入れます。

$node  = '/usr/bin/node'; 
$base  = '/path/to/your/app'; 
$appfile = 'my_app.js'; 
$logfile = 'my_app.log'; 
$proc  = explode("\n", trim(shell_exec(" ps -ef | grep -v grep | grep $appfile"))); 
if ($proc[0] == '') { 
    exec("$node $base/$appfile >> $base/$logfile &"); 
} 

それは細かい作業だとは一度だけノードサーバを実行しています。

EDIT:ミニマPHPコードのバージョン:

if(trim(shell_exec('ps -ef | grep -v grep | grep app.js')))=='') { 
    exec('node /path/to/app.js >> /path/to/app.log &'); 
} 
関連する問題