原文 来自Nginx官网 :https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/#upgrading-to-a-new-binary-on-the-fly
如果想要升级Nginx版本(或者在原本版上增加、删除模块),同时保持服务不间断,采用如下方式可满足要求。
1. 使用新的二进制文件替换老的二进制文件,这需要注意的是nginx源码在执行make编译后,不要直接make install,否则可能会覆盖其他配置文件,命令如下:
cd /usr/local/nginx/sbin
mv nginx nginx.old
cp ***/nginx .
2. 向老的master进程发送SIGUSR2信号,这一步操作将会引起以下变动:
- 将老的nginx.pid 重命名为nginx.pid.oldbin 命令如下:
- 执行新的二进制文件,启动master进程,并启动worker进程
此时,查看nginx应有两个master进程及二倍的worker进程
: PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)命令如下:
kill -s SIGUSR2 `cat /usr/local/nginx/logs/nginx.pid`
3. 将老的nginx进程优雅的关闭
kill -s SIGQUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
此时查看Nginx进程只有一个master进程了
: PID PPID USER %CPU VSZ WCHAN COMMAND : 36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx : 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) : 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) : 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
4. 至此 nginx升级完成,可以查看下版本是否升级成功
/usr/local/nginx/sbin/nginx -v