检查进程是否正在运行,如果没有启动它
我在我的基于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 &'); }