2016-07-15 138 views
2

我在我的基於codeigniter的php應用程序中使用Ratchet,一個Node js應用程序和ZeroMq。檢查進程是否正在運行,如果不啓動它

在我的管理儀表板中,我希望能夠看到套接字是否正在運行,以及如果我的節點js應用程序正在運行。如果發生故障,我需要能夠恢復在線狀態。

我知道我可以使用php的exec將它重新聯機,但只要腳本結束,命令行也一樣。

我該如何做到這一點?喜歡的東西:

棘輪:狀態在線(停止,啓動,重啓) 節點服務:狀態在線(停止,啓動,重啓) ZeroMq:狀態在線(停止,啓動,重啓)

+1

你能澄清你用'的意思,但只要劇本完成,這樣做的命令line.' – KFE

+0

我的意思是,如果你運行像EXEC (「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 &"); 
} 

它的正常工作和運行的節點服務器只有一次

編輯:簡約的PHP代碼版本:

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