我有一个
ruby on rails应用程序,它运行在passenger和Nginx上,有一个主要的web服务器和多个应用程序服务器.我正在尝试更新我的部署过程,以最大限度地减少(或理想情况下,删除)部署导致的任何停机时间.现在的主要障碍是乘客需要一些时间来重新启动(即重新加载应用程序),所以为了解决这个问题,我想错开重启,以便一次只能重启一个应用服务器.
原文链接:/ubuntu/348710.html为了做到这一点而不丢失任何长时间运行的乘客流程,我想我需要优雅地关闭应用服务器的Nginx实例,这将导致它不再接受新连接但继续处理现有连接;同样,HAProxy将检测到应用服务器已关闭并将新请求路由到其他服务器.
但是,假设有一个长时间运行的进程,我不知道如何检测正常关闭何时完成,以便我可以重新启动它.由于关闭是由发送信号引起的(即kill -QUIT $(cat /var/run/Nginx.pid)),并且kill命令将立即返回,我无法组合命令(即kill …& & touch restarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.
有没有好办法呢?