遇到问题:
升级软件版本之后,需要启动新的版本,启动不了,端口已经被占用
如果直接把旧版本的服务停止掉,会影响线上业务的使用
最佳解决办法:
①旧的不先停掉
②新的又可以起来
③旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程
-USR2 平滑启动一个进程(平滑升级)
-WINCH 优雅的关闭子进程
-QUIT 优雅关闭主进程
操作流程:
第一步:选择要编译安装新版本
说明:之前安装nginx是1.14版本的,现在要升级到1.16版本
第二步:解压文件并进入文件夹
# tar xvf nginx-1.16.0.tar.gz
# cd nginx-1.16.0
第三步:查看以前就版本安装用的编译参数
# /usr/local/nginx/sbin/nginx -V
第四步:开始编译
# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
# make && make install
说明:升级新版本,需要把软件的安装路径,指定到旧版本上。
以上操作完成之后,会把原来的旧版本备份为nginx.old
第五步:新旧版本同时运行
# kill -USR2 主进程号
说明:主进程号是看旧进程pid
# cat /usr/local/nginx/logs/nginx.pid
或者
# ps aux|grep nginx
第六步:停止掉旧进程
说明:查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程
# kill -WINCH 旧的主进程号
# kill -QUIT 旧的主进程号
第二种方法:在nginx中,默认提供了平滑升级的操作,只需要执行以下命令
#注意先configure 在nginx源码包执行
# make install && make upgrade
说明:执行完上面第四步之后,执行上面的命令就行