原来版本是1.12的装在/usr/local/nginx2,现在需要更新成1.16的,需要进过以下步骤
1:查看现有nginx进程信息 ps -ef | grep nginx
root 7508 1 0 21:46 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 7509 7508 0 21:46 ? 00:00:00 nginx: worker process
root 7524 1231 0 21:58 pts/0 00:00:00 grep nginx
然后把旧的二进制文件备份下
cp /usr/local/nginx2/sbin/nginx nginx.old
2: 把新的nginx的二进制文件覆盖掉旧的nginx二进制文件
cd /data/soft/nginx-1.16.0
../configure --prefix=/usr/local/nginx2
make
cp -r /data/soft/nginx-1.16.0/objs/nginx /usr/local/nginx2/sbin/ -f
/data/soft/nginx-1.16.0/objs这个目录是新的nginx1.16编辑后才有的
3:给正在运行旧的nginx的master进程发个信号告诉master进程我们要热部署了
kill -USR2 7508
运行之后发现会新起一个master进程和worker进程,老的master跟worker都还在,只是不再监听80跟443端口了
root 7508 1 0 21:46 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 7509 7508 0 21:46 ? 00:00:00 nginx: worker process
root 7552 7508 0 22:16 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 7553 7552 0 22:16 ? 00:00:00 nginx: worker process
./nginx -V
/usr/local/nginx2/sbn/nginx version: nginx/1.16.0
已经是新的版本了
4:把旧的worker进程优雅的关掉
kill -WINCH 7508
这个时候你会发现老的master进程还在,worker进程不在了,老的master进程流着可以做版本回退
二:日志切割
1:把原来的access.log备份下
mv access.log access.log.bak
2: 执行:
./sbin/nginx -s reopen