检查进程是否正在运行,如果没有启动它

我在我的基于codeigniter的php应用程序中使用了Ratchet,Node js应用程序和ZeroMq。

在我的pipe理仪表板中,我希望能够看到套接字是否正在运行,以及如果我的节点js应用程序正在运行。 如果发生故障,我需要能够恢复在线状态。

我知道我可以使用PHP的exec来重新联机,但脚本一完成,命令行也一样。

我怎样才能做到这一点? 就像是:

状态在线(停止,启动,重新启动)节点服务:状态在线(停止,启动,重新启动)ZeroMq:状态在线

我尝试了很多解决scheme,包括与fsockopen()检查端口是否打开…

但唯一可行的解​​决scheme是检查节点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 &'); }