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

时间:2016-07-15 18:26:02

标签: php node.js codeigniter ratchet

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

在我的管理仪表板中,我希望能够查看套接字是否正在运行以及我的节点js app是否正在运行。如果它失败了,我需要能够将它重新上线。

我知道我可以使用php exec将其重新联机,但是一旦脚本完成,命令行也会完成。

我怎样才能做到这一点?类似的东西:

棘轮:在线状态(停止,开始,重启) 节点服务:在线状态(停止,启动,重启) ZeroMq:在线状态(停止,启动,重启)

1 个答案:

答案 0 :(得分:1)

我尝试了许多解决方案,包括使用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/> <nav class="navbar navbar-toggleable-md navbar-light bg-faded"> <ul class="navbar-nav"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Dropdown link </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> <a class="dropdown-item" href="#">Something else here</a> </div> </li> </ul> </nav>检查端口是否已打开...

但唯一可行的解​​决方案是检查节点js应用程序进程是否已启用参数应用程序文件。如果不是,我使用fsockopen()永久运行它(使用exec参数)并将输出放在日志文件中(在节点应用程序的同一文件夹中)。

&

它工作正常,只运行一次节点服务器

编辑:极简主义的PHP代码版本:

$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 &");
}