原來版本是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