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

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

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升级时候用

Nginx系列:详解进程结构和热部署插图1

[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 进程准备就绪后,旧的主进程会退出,完成整个配置文件重载过程。

Nginx系列:详解进程结构和热部署插图2

热升级流程

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` # 等待请求处理结束后再退出
免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容