我正在用 ReactPHP 创建一个套接字服务器,我需要它永远运行。 我还有一个命令面板,我必须在其中检查进程是否正在运行,我可以停止或启动它(或重新启动它)。
我不知道如何实现这一点。
我的计划是:
我还希望脚本始终处于侦听状态,那么如果例如我必须重新启动服务器,我该如何使脚本自动启动? 我正在考虑每分钟尝试连接到服务器的 cron;如果失败,它会再次启动 shell_exec('php script.php');
处理所有问题的最佳解决方案是什么? (服务器操作系统为 CentOS 7)
答案 0 :(得分:0)
正如@Volker 所说,如果您想优雅地停止循环,只需停止循环即可。您可以定期检查文件或查询表,但这不是一个好方法。
一个不错的流程可能是收听管理消息以停止服务器。当然,您应该关心验证谁可以停止服务器。通过这种方式,它无需等待一段间隔即可停止运行,并且您可以减少定期查询文件系统或数据库的开销。
另一种很酷的方法是使用 RabbitMQ 或类似的队列服务。您只需监听您的队列服务器,然后您就可以从您的脚本向 RabbitMQ 发送消息,然后从那里发送到您的服务器。
祝你好运!
编辑:如果您使用 systemd 运行您的服务器,一个很好的处理方式可能就是监听系统信号以优雅地停止应用程序。看看addSignal,可以通过pid处理kill,也可以通过systemd。
答案 1 :(得分:0)
为了处理正常关闭与长时间运行的流响应,我创建了一个类似获取/释放的机制。
当处理程序开始流式传输长响应时,它会获取一个锁,并在流式传输完成后释放它(它只是一个 uniqid()
数组)。
如果有活动锁,服务器可以决定等待。
我使用主管通过 SIGTERM 信号处理启动/停止。