当前位置: 首页 > news >正文

Nginx平滑升级版本或添加模块

文章目录

  • 一、Nginx 平滑升级
  • 二、升级失败 回滚操作
  • 三、遇到问题

一、Nginx 平滑升级

一般有两种情况下需要升级 nginx,一种是确实要升级 nginx 的版本,另一种是要为 nginx 添加新的模块。

Nginx平滑升级其原理简单概括:

  • (1)在不停掉老进程的情况下,启动新进程。
  • (2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
  • (3)新进程接受新请求。
  • (4)老进程处理完所有请求,关闭所有连接后,停止。

信号说明:

信号nginx内置shell说明
HUPnginx -s reload重载配置文件
USR1nginx -s reopen重新打开日志文件,配置mv,用做日志切割
USR2-热升级nginx程序
WINCH-优雅的关闭相关的worker进程
QUITnginx -s squit优雅的停止nginx
TERM,INTnginx -s stop立即停止nginx

实践:1.16 升级到 1.18

nginx -v
nginx version: nginx/1.16.1

按照原来的编译参数安装 nginx 的方法进行安装,只需要到 make,千万不要 make install 。如果make install 会将原来的配置文件覆盖

wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar zxvf nginx-1.18.0.tar.gz -C /usr/local/src
cd /usr/local/src/nginx-1.18.0./configure --prefix=/usr/local/nginx --user=nginx --with-http_ssl_module
make 

备份替换nginx命令:

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_$(date +%F)
cp /usr/local/src/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/

测试新版本:

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -v

查找nginx.pid文件位置

find / -name nginx.pid
/usr/local/nginx/logs/nginx.pid

发送平滑迁移信号 USR2: 启动新的主进程,实现热升级

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

发送WINCH信号给旧版主进程,旧版主进程就开始从容关闭

kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`

二、升级失败 回滚操作

1、替换原来的 nginx命令

cd /usr/local/nginx/sbin/
mv nginx_2022-03-21 nginx

2、kill -HUP 旧版本的Master进程号

//不重载 配置文件下 启动旧的worker进程

kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin`

3、kill -USR2 新版本的主进程号

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

4、kill -WINCH 新版本的主进程号

kill -WINCH `cat /usr/local/nginx/logs/nginx.pid`

三、遇到问题

问题:执行完成 “发送平滑迁移信号 USR2” 没有出现新的Master进程信息

查看日志 报错内容为: 大致意思是 找不到 nginx 目录

execve() failed while executing new binary process "nginx" (2: No such file or directory)

原因:Nginx平滑升级是根据环境变量来进行的 ,找不到 nginx目录 是因为上次启动nginx不是 使用完全路径启动的 而环境变量中并没有 nginx这个目录 所以导致 这个问题!

解决:使用正确的启动方法

/usr/local/nginx/sbin/nginx 
http://www.lryc.cn/news/93291.html

相关文章:

  • 高阶复杂网络重建:从时间序列中重建高阶网络
  • Day05 03-MySQL主从-主主原理与搭建详解
  • STL之vector
  • 2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题-单项选择题解析
  • vscode Delete `␍⏎·····`
  • 读书笔记-《ON JAVA 中文版》-摘要16[第十六章 代码校验]
  • SQL Server:打造高效数据管理系统的利器
  • 代码随想录二刷day20 | 二叉树之 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
  • python基础知识(十三):numpy库的基本用法
  • 【SA8295P 源码分析】16 - TouchScreen Panel (TP)线程函数 tp_recv_thread() 源码分析
  • Python3数据分析与挖掘建模(13)复合分析-因子关分析与小结
  • 【stable diffusion】图片批量自动打标签、标签批量修改(BLIP、wd14)用于训练SD或者LORA模型
  • TCP可靠数据传输
  • Python 私有变量和私有方法介绍
  • Kotlin Lambda表达式和匿名函数的组合简直太强了
  • uniapp 小程序 获取手机号---通过前段获取
  • 面板安全能力持续增强,新增日志审计功能,1Panel开源面板v1.3.0发布
  • k8s学习-CKS考试必过宝典
  • jmeter如何将上一个请求的结果作为下一个请求的参数
  • JAVA如何学习爬虫呢?
  • 距离保护原理
  • 从微观世界的RST包文视角助力企业网络应用故障排查和优化
  • 企业微信开发,简单测试。
  • element日期选择设置默认时间el-date-picker
  • AB32VG:SDK_AB53XX_V061(3)IO口复用功能的补充资料
  • UnityVR--组件10--UGUI简单介绍
  • k8s 探针
  • 【爬虫】4.4 Scrapy 爬取网站数据
  • PureComponent和Component的区别和底层处理机制
  • python3 爬虫相关学习9:BeautifulSoup 官方文档学习