Nginx系列:详解进程结构和热部署
nginx进程结构

linux 信号量管理机制
[root@VM-8-17-centos nginx]# 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
常用信号量
| 代码 | 编号 | 备注 |
|---|---|---|
| SIGCHLD | Kill -17 $PID | 当子进程挂掉的时候,父进程会收到子进程的SIGCHLD信号 |
| SIGQUIT | Kill -3 $PID | 和SIGINT类似, 但由QUIT字符(通常是Ctrl-/)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号 |
| SIGTERM | kill -15 $PID | 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。(并不会立马结束) |
| SIGKILL | Kill -9 $PID | 用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。 |
| SIGHUP | Kill -1 $PID | 平滑重启,重新加载配置文件 (平滑重启,修改配置文件之后不用重启服务器。 直接kill -PUT 进程号即可) |
| SIGUSR1 | Kill -10 $PID | 留给用户使用,重新读取日志文件,在切割日志时用途较大 (停止写入老日志文件,打开新日志文件,之所以这样是因为老日志文件就算修改的文件名, 由于inode的原因,nginx还会一直往老的日志文件写入数据) |
| SIGUSR2 | Kill -12 $PID | 留给用户使用,平滑升级可执行程序 ,nginx升级时候用 |
| SIGWINCH | Kill -28 $PID | 窗口大小改变时发出,平滑升级可执行程序 ,nginx升级时候用 |

[root->mcode-server->~]# ps -ef | grep nginx
root 8225 1 0 21:58 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 8226 8225 0 21:58 ? 00:00:00 nginx: worker process
nginx 8227 8225 0 21:58 ? 00:00:00 nginx: worker process
root 8503 7810 0 22:08 pts/0 00:00:00 grep --color=auto nginx
[root->mcode-server->~]# kill -15 8225
[root->mcode-server->~]# ps -ef | grep nginx
root 8509 7810 0 22:08 pts/0 00:00:00 grep --color=auto nginx
[root->mcode-server->~]# ps -ef | grep nginx
root 8561 1 0 22:09 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 8563 8561 0 22:09 ? 00:00:00 nginx: worker process
nginx 8573 8561 0 22:10 ? 00:00:00 nginx: worker process
root 8621 7810 0 22:11 pts/0 00:00:00 grep --color=auto nginx
[root->mcode-server->~]# kill -s SIGTERM 8561
[root->mcode-server->~]# ps -ef | grep nginx
root 8784 7810 0 22:17 pts/0 00:00:00 grep --color=auto nginx
[root->mcode-server->~]# systemctl start nginx
[root->mcode-server->~]# ps -ef | grep nginx
root 8801 1 0 22:17 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 8802 8801 0 22:17 ? 00:00:00 nginx: worker process
nginx 8803 8801 0 22:17 ? 00:00:00 nginx: worker process
root 8805 7810 0 22:17 pts/0 00:00:00 grep --color=auto nginx
[root->mcode-server->~]# kill -s SIGHUP 8801
[root->mcode-server->~]# ps -ef | grep nginx
root 8801 1 0 22:17 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 8810 8801 0 22:18 ? 00:00:00 nginx: worker process
nginx 8811 8801 0 22:18 ? 00:00:00 nginx: worker process
root 8813 7810 0 22:18 pts/0 00:00:00 grep --color=auto nginx
[root->mcode-server->~]# nginx -s reload
[root->mcode-server->~]# ps -ef | grep nginx
root 8801 1 0 22:17 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 8900 8801 0 22:21 ? 00:00:00 nginx: worker process
nginx 8901 8801 0 22:21 ? 00:00:00 nginx: worker process
root 8903 7810 0 22:21 pts/0 00:00:00 grep --color=auto nginx
Nginx 配置文件重载的核心原理
- 语法检查: 在进行配置文件重载之前,Nginx 首先会检查新的配置文件的语法和合法性。这是为了防止错误的配置导致服务器无法启动或异常运行。
- 备份旧配置: Nginx 会在进行重载操作前,备份当前正在使用的配置文件。这样,在重载后如果出现问题,可以方便地回滚至旧的配置,确保系统的稳定性。
- 加载新配置: 一旦新配置文件通过语法检查,Nginx 会将新的配置加载到内存中,但此时并不会立即应用到服务器。
- 发送信号给旧进程: Nginx 主进程会发送一个信号给旧的 worker 进程,要求它们完成未完成的请求并退出。这确保了旧的请求能够平稳地完成,同时不再接受新的请求。
- 启动新 worker 进程: 当旧的 worker 进程完成退出后,Nginx 会启动新的 worker 进程,新进程将基于加载到内存中的新配置运行。
- 旧进程退出: 在新的 worker 进程准备就绪后,旧的主进程会退出,完成整个配置文件重载过程。

热升级流程
1、将旧nginx文件替换成新nginx文件
mv /server/application/nginx/sbin/nginx /server/application/nginx/sbin/nginx_$(date +%F)
cp /server/download/nginx-1.25.2/objs/nginx /server/application/nginx/sbin/
2、向老master进程发送USR2信号
kill -USR2 `cat /var/run/nginx.pid`
3、master进程修改pid文件名,加后缀.oldbin(保存老pid文件)
ll /var/run/nginx.pid* # 会出现一个nginx.pid.oldbin
4、master进程用新nginx文件启动新master进程。(目前为止有两个master进程)
ps -ef | grep nginx
5、向老master进程发送WINCH信号,关闭老worker
kill -WINCH `cat /var/run/nginx.pid.oldbin`
6、回滚:向老master发送HUP,向新master发送QUIT。
kill -HUP `cat /var/run/nginx.pid.oldbin` # 使用HUP重新加载配置文件,使用新的配置,并逐步关闭旧进程
kill -QUIT `cat /var/run/nginx.pid.oldbin` # 等待请求处理结束后再退出
栏 目:其它服务器
下一篇:Nginx系列:虚拟主机配置(IP、端口、域名)三种配置方式
本文标题:Nginx系列:详解进程结构和热部署
本文地址:https://zz.feitang.co/server/29772.html
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





