Nginx热部署
步骤1: 查看现在的nginx状态
[root@test1 sbin]# nginx -v
显示:
nginx version: nginx/1.12.2
[root@test1 sbin]# ps -ef | grep nginx
显示:
root 9914 1 0 13:34 ? 00:00:00 nginx: master process nginx #9914为nginx的master进程号
nginx 9915 9914 0 13:34 ? 00:00:00 nginx: worker process #nginx的worker进程号
步骤2:备份nginx启动程序
我的nginx启动程序放在/usr/local/nginx/sbin/下
[root@test1 sbin]# mv nginx nginx.old
步骤3:将新版本的nginx移至到nginx的启动程序目录中
[root@test1 sbin]# cp /opt/nginx-1.17.3/objs/nginx /usr/local/nginx/sbin/
[root@test1 sbin]# ls
显示:
nginx nginx.old
步骤4: 给nginx的master进程号发送需要进行版本更新信号
[root@test1 sbin]# kill -USR2 9914 #通过步骤1中我们得知nginx的master进程号
发送信息告知正在运行的老nginx我们需要进行版本更新,然后它会开启新nginx启动程序的master进程并保留老nginx的master进程
这时我们再查看nginx的进程状态
[root@test1 sbin]# ps -ef | grep nginx
显示:
root 9914 1 0 13:40 ? 00:00:00 nginx: master process nginx #nginx的老master进程号
nginx 9915 9914 0 13:40 ? 00:00:00 nginx: worker process #nginx的老worker进程号
root 9920 9914 0 13:40 ? 00:00:00 nginx: master process nginx #9920为nginx的新master进程号
nginx 9921 9920 0 13:40 ? 00:00:00 nginx: worker process #nginx的新worker进程号
步骤5: 给nginx的master进程号发送优雅关闭老master启动的worker进程信号
[root@test1 sbin]# kill -WINCH 9914
优雅关闭老nginx启动程序的worker进程(此时老nginx启动程序的master进程还在,还可以进行版本回滚)
这时我们再查看nginx的进程状态
[root@test1 sbin]# ps -ef | grep nginx
显示:
root 9914 1 0 13:41 ? 00:00:00 nginx: master process nginx
root 9920 9914 0 13:41 ? 00:00:00 nginx: master process nginx #9920为nginx的新master进程号
nginx 9921 9920 0 13:41 ? 00:00:00 nginx: worker process #nginx的新worker进程号
这时可以看到老master进程生成的woker进程已经退出
------------------------------分割线-------------------------------
Nginx回滚
步骤1: 查看现在的nginx状态
[root@test1 sbin]# ps -ef | grep nginx
显示:
root 9914 1 0 13:43 ? 00:00:00 nginx: master process nginx #nginx的老master进程号
root 9920 9914 0 13:43 ? 00:00:00 nginx: master process nginx #9920为nginx的新master进程号
nginx 9921 9920 0 13:43 ? 00:00:00 nginx: worker process #nginx的新worker进程号
步骤2: 给nginx的老master进程发送启动worker进程信号
[root@test1 sbin]# kill -HUP 9914
[root@test1 sbin]# ps -ef | grep nginx
显示:
root 9914 1 0 13:45 ? 00:00:00 nginx: master process nginx #nginx的老master进程号
root 9920 9914 0 13:45 ? 00:00:00 nginx: master process nginx #9920为nginx的新master进程号
nginx 9921 9920 0 13:45? 00:00:00 nginx: worker process #nginx的新worker进程号
nginx 15887 9914 0 13:45? 00:00:00 nginx: worker process #nginx的老master刚启动的worker进程号
步骤3: 给nginx的新master进程号发送优雅关闭新master启动的worker进程信号
[root@test1 sbin]# kill -WINCH 9920
[root@test1 sbin]# ps -ef | grep nginx
显示:
root 9914 1 0 13:45 ? 00:00:00 nginx: master process nginx #nginx的老master进程号
root 9920 9914 0 13:45 ? 00:00:00 nginx: master process nginx #9920为nginx的新master进程号
nginx 15887 9914 0 13:45? 00:00:00 nginx: worker process #nginx的老master刚启动的worker进程号
步骤4: 将备份的老nginx启动程序修改回
[root@test1 sbin]# mv nginx nginx.bak #将正在使用的新Nginx启动程序改名
[root@test1 sbin]# mv nginx.old nginx #将之前备份的nginx.old修改为nginx
[root@test1 sbin]# nginx -v
显示:
nginx version: nginx/1.12.2