ubuntu – 有没有办法检测nginx何时完成正常关闭?

我有一个 ruby on rails应用程序,它运行在passenger和nginx上,有一个主要的web服务器和多个应用程序服务器.我正在尝试更新我的部署过程,以最大限度地减少(或理想情况下,删除)部署导致的任何停机时间.现在的主要障碍是乘客需要一些时间来重新启动(即重新加载应用程序),所以为了解决这个问题,我想错开重启,以便一次只能重启一个应用服务器.

为了做到这一点而不丢失任何长时间运行的乘客流程,我想我需要优雅地关闭应用服务器的nginx实例,这将导致它不再接受新连接但继续处理现有连接;同样,HAProxy将检测到应用服务器已关闭并将新请求路由到其他服务器.

但是,假设有一个长时间运行的进程,我不知道如何检测正常关闭何时完成,以便我可以重新启动它.由于关闭是由发送信号引起的(即kill -QUIT $(cat /var/run/nginx.pid)),并且kill命令将立即返回,我无法组合命令(即kill …& & touch restarted),因为即使nginx没有完成其关闭,touch命令也会立即执行.

有没有好办法呢?

这样的事情怎么样?
while [ -n "$(pgrep nginx)" ]
do
  some-stuff  
done

因此,pgrep将查找任何nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1; /etc/init.d/nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

相关文章

文章浏览阅读2.3k次,点赞4次,收藏22次。最近安装了CARLA预...
文章浏览阅读6.3k次,点赞5次,收藏15次。在清华镜像中下载U...
文章浏览阅读5k次。linux环境, python3.7.问题描述: 安装...
文章浏览阅读4.2k次,点赞4次,收藏17次。要安装这个 standa...
文章浏览阅读894次,点赞51次,收藏31次。在安卓使用vscode主...