2016-07-15 139 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 &'); 
} 
相关问题