重识Nginx - 05 热部署_不停机更换新版本的nginx
文章目录
热部署 (不停机更换新版本的nginx 二进制文件)
- 查看nginx进程
- 模拟 上传新版本,老版本的ng备份
- 发送 USR2 信号给 原来的ng的 pid
- 再次查看ng进程,会发现多出来几个, 此时老的ng已经不再监听了,流量会切到新的ng上来
- 向老的ng master 发送信息,优雅的关闭它的 work线程 (需要等待老业务都处理完了)
# 查看nginx进程
[root@VM-0-7-centos artisan_ng]# ps -ef|grep nginx |grep -v grep
root 447751 1 0 12:23 ? 00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody 454927 447751 0 13:14 ? 00:00:00 nginx: worker process
[root@VM-0-7-centos artisan_ng]#
[root@VM-0-7-centos artisan_ng]# pwd
/root/ng/artisan_ng
[root@VM-0-7-centos artisan_ng]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@VM-0-7-centos artisan_ng]# cd sbin/
# 模拟 上传新版本,老版本的ng备份
[root@VM-0-7-centos sbin]# cp nginx nginx_old
[root@VM-0-7-centos sbin]#
# 发送 USR2 信号给 原来的ng的 pid
[root@VM-0-7-centos sbin]# kill -USR2 447751
[root@VM-0-7-centos sbin]#
# 再次查看ng进程,会发现多出来几个, 此时老的ng已经不再监听了,流量会切到新的ng上来
[root@VM-0-7-centos sbin]# ps -ef|grep nginx
root 447751 1 0 12:23 ? 00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody 454927 447751 0 13:14 ? 00:00:00 nginx: worker process
root 455372 447751 0 13:17 ? 00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody 455373 455372 0 13:17 ? 00:00:00 nginx: worker process
root 455386 454554 0 13:17 pts/1 00:00:00 grep --color=auto nginx
[root@VM-0-7-centos sbin]#
[root@VM-0-7-centos sbin]#
# 向老的ng master 发送信息,优雅的关闭它的 work线程 (需要等待老业务都处理完了)
[root@VM-0-7-centos sbin]# kill -WINCH 447751
[root@VM-0-7-centos sbin]#
[root@VM-0-7-centos sbin]#
# 老的master进程 还是存在的, 已经没有work进程了 。 老的ngxin存在 便于我们进行版本回退 (可以给老的nginx 发送 reload命令)
[root@VM-0-7-centos sbin]# ps -ef|grep nginx |grep -v grep
root 447751 1 0 12:23 ? 00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
root 455372 447751 0 13:17 ? 00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody 455373 455372 0 13:17 ? 00:00:00 nginx: worker process
[root@VM-0-7-centos sbin]#
[root@VM-0-7-centos sbin]#
kill 信号说明
Linux kill 命令用于删除执行中的程序或工作。
kill 可将指定的信息送至程序。
- 预设的信息为 SIGTERM(15),可将指定程序终止。
- 若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。
语法
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
参数说明:
-l <信息编号>
若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。-s <信息名称或编号>
指定要送出的信息。- [程序] [程序]可以是程序的PID或是PGID,也可以是工作编号。
- 使用 kill -l 命令列出所有可用信号。
最常用的信号是:
- 1 (HUP):重新加载进程。
- 9 (KILL):杀死一个进程。
- 15 (TERM):正常停止一个进程。
杀死进程
# kill 12345
强制杀死进程
# kill -KILL 123456
发送SIGHUP信号,可以使用一下信号
# kill -HUP pid
彻底杀死进程
# kill -9 123456
显示信号 kill -l
[root@VM-0-7-centos ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@VM-0-7-centos ~]#
信号 | 取值 | 默认动作 | 含义(发出信号的原因) |
---|---|---|---|
SIGHUP | 1 | Term | 终端的挂断或进程死亡 |
SIGINT | 2 | Term | 来自键盘的中断信号 |
SIGQUIT | 3 | Core | 来自键盘的离开信号 |
SIGILL | 4 | Core | 非法指令 |
SIGABRT | 6 | Core | 来自abort的异常信号 |
SIGFPE | 8 | Core | 浮点例外 |
SIGKILL | 9 | Term | 杀死 |
SIGSEGV | 11 | Core | 段非法错误(内存引用无效) |
SIGPIPE | 13 | Term | 管道损坏:向一个没有读进程的管道写数据 |
SIGALRM | 14 | Term | 来自alarm的计时器到时信号 |
SIGTERM | 15 | Term | 终止 |
SIGUSR1 | 30,10,16 | Term | 用户自定义信号1 |
SIGUSR2 | 31,12,17 | Term | 用户自定义信号2 |
SIGCHLD | 20,17,18 | Ign | 子进程停止或终止 |
SIGCONT | 19,18,25 | Cont | 如果停止,继续执行 |
SIGSTOP | 17,19,23 | Stop | 非来自终端的停止信号 |
SIGTSTP | 18,20,24 | Stop | 来自终端的停止信号 |
SIGTTIN | 21,21,26 | Stop | 后台进程读终端 |
SIGTTOU | 22,22,27 | Stop | 后台进程写终端 |
SIGBUS | 10,7,10 | Core | 总线错误(内存访问错误) |
SIGPOLL | Term | Pollable事件发生(Sys V),与SIGIO同义 | |
SIGPROF | 27,27,29 | Term | 统计分布图用计时器到时 |
SIGSYS | 12,-,12 | Core | 非法系统调用(SVr4) |
SIGTRAP | 5 | Core | 跟踪/断点自陷 |
SIGURG | 16,23,21 | Ign | socket紧急信号(4.2BSD) |
SIGVTALRM | 26,26,28 | Term | 虚拟计时器到时(4.2BSD) |
SIGXCPU | 24,24,30 | Core | 超过CPU时限(4.2BSD) |
SIGXFSZ | 25,25,31 | Core | 超过文件长度限制(4.2BSD) |
SIGIOT | 6 | Core | IOT自陷,与SIGABRT同义 |
SIGEMT | 7,-,7 | Term | |
SIGSTKFLT | -,16,- | Term | 协处理器堆栈错误(不使用) |
SIGIO | 23,29,22 | Term | 描述符上可以进行I/O操作 |
SIGCLD | -,-,18 | Ign | 与SIGCHLD同义 |
SIGPWR | 29,30,19 | Term | 电力故障(System V) |
SIGINFO | 29,-,- | 与SIGPWR同义 | |
SIGLOST | -,-,- | Term | 文件锁丢失 |
SIGWINCH | 28,28,20 | Ign | 窗口大小改变(4.3BSD, Sun) |
SIGUNUSED | -,31,- | Term | 未使用信号(will be SIGSYS) |
说明: linux 的 kill 命令是向进程发送信号,kill 不是杀死的意思,-9 表示无条件退出,但由进程自行决定是否退出,这就是为什么 kill -9 终止不了系统进程和守护进程的原因
相关文章
- 技术分享 | MySQL Shell 定制化部署 MySQL 实例
- 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务「建议收藏」
- Flink应用部署模式
- 部署上线-Nginx设置
- 搭建hadoop集群的三种方式_hadoop集群部署
- Nginx代理转发_nginx代理和转发的区别
- 3-Kubernetes入门之Ubuntu安装部署集群
- Nginx代理服务器环境快速搭建部署
- Nginx部署Vue项目
- 【前端部署附录二】写给前端的 nginx 配置指南
- windows服务器Nginx服务化一键安装于部署
- Ambari 编译部署后,视图怎么没有了?
- Nginx 的配置文件 nginx.conf
- 部署机器学习方案之困(下)
- Go 语言 Web 应用怎么使用 Nginx 部署?
- Activiti 部署流程定义及相关的表(classpath部署、zip部署)详解编程语言
- 部署项目至Linux系统:一种新模式(项目发布到linux)
- 玩转Nginx:在Linux上部署专业网站(nginxlinux)
- Linux下WAR包解压实现快速部署发布(linux下war包解压)
- Redis优势助力Nginx提速(redis读nginx)
- Oracle ASM部署实现资源高效利用(oracle asm部署)
- 平台Redis在ARM平台上的部署实践(redis 适配arm)