我正在运行独角兽(unicorn)并尝试实现零停机重启。
到目前为止,一切都很顺利,主进程分叉并启动了4个新的工作进程,然后杀死旧的进程,所有人都很开心。
我们的脚本发送以下命令来重启独角兽:
kill -s USR2 `cat /www/app/shared/pids/unicorn.pid`
表面上一切看起来都很好,但事实证明独角兽没有重新加载production.rb。(每次部署时,我们都将config.action_controller.asset_host的值更改为一个带有预编译资产的新CDN容器端点。)用这种方式重新启动独角兽后,资产主机仍指向旧版本。进行“真正”的重启(即:停止主进程,然后从头开始再次启动独角兽)可获取新的配置更改。
在我们的独角兽配置文件中设置了preload_app为true。
你有何想法?
ps -ef | grep unicorn
只会显示主进程和四个工作进程,这绝对杀死了旧的主进程。在发出USR2信号之前,主进程的pid与旧的主进程的pid不同。 - Michael Shimmins