我在我的基于codeigniter的php应用程序中使用了Ratchet,一个Node js应用程序和ZeroMq。
在我的管理仪表板中,我希望能够查看套接字是否正在运行以及我的节点js app是否正在运行。如果它失败了,我需要能够将它重新上线。
我知道我可以使用php exec
将其重新联机,但是一旦脚本完成,命令行也会完成。
我怎样才能做到这一点?类似的东西:
棘轮:在线状态(停止,开始,重启) 节点服务:在线状态(停止,启动,重启) ZeroMq:在线状态(停止,启动,重启)
答案 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 &");
}