检查进程是否正在运行,如果不启动它
问题描述:
我在我的基于codeigniter的php应用程序中使用Ratchet,一个Node js应用程序和ZeroMq。检查进程是否正在运行,如果不启动它
在我的管理仪表板中,我希望能够看到套接字是否正在运行,以及如果我的节点js应用程序正在运行。如果发生故障,我需要能够恢复在线状态。
我知道我可以使用php的exec
将它重新联机,但只要脚本结束,命令行也一样。
我该如何做到这一点?喜欢的东西:
棘轮:状态在线(停止,启动,重启) 节点服务:状态在线(停止,启动,重启) ZeroMq:状态在线(停止,启动,重启)
答
我尝试了包括与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 &');
}
你能澄清你用'的意思,但只要剧本完成,这样做的命令line.' – KFE
我的意思是,如果你运行像EXEC (“node main.js”); 它会打开并关闭它。另外我不知道如何控制它是否运行 –