首页 > 系统相关 >2nginx平滑升级及信号使用

2nginx平滑升级及信号使用

时间:2023-08-27 12:44:06浏览次数:41  
标签:logs -- 平滑 apps 升级 nginx 2nginx root localhost

nginx平滑升级及信号使用

1信号

nginx 命令支持向其发送信号,实现不同功能

nginx 当做单独命令使用有以下选项

[root@localhost ~]# nginx -h   显示帮助信息
nginx version: nginx/1.18.0
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
​
​
Options:
  -?,-h         : 打印帮助信息
  -v            : 显示 Nginx 的版本信息
  -V            : 显示详细的 Nginx 版本信息
  -t            : 检测配置文件语法的正确性并打印结果
  -q            : 禁止打印错误信息到标准输出
  -s signal     : 向主进程发送信号,signal 可以是 stop、quit、reopen 或 reload
  -p prefix     : 设置 Nginx 的安装路径(默认为 /usr/local/nginx/)
  -c filename   : 设置 Nginx 的配置文件路径(默认为 /usr/local/nginx/conf/nginx.conf)
  -g directives : 设置全局指令(例如设置 worker_processes 和 worker_connections)
​

image-20230824193103338

1 显示版本

[root@localhost ~]# nginx -v
nginx version: nginx/1.18.0
​

image-20230824193244891

2显示编译详细情况 模块等信息

[root@localhost ~]# nginx -V
# -V 大v
​

image-20230824193353571

3发送信号

kill -l  看信号大全
nginx -h   中可以看到的信号较少
s signal     : send signal to a master process: stop, quit, reopen, reload
​
可以使用man手册来查看详细的信号 如果没安装,去源码包里找到man文件
man   路径/nginx.8      不加路径打不开man帮助
stop        SIGTERM        直接停止
quit        SIGQUIT        优雅的退出:有人在访问不会结束进程
reopen      SIGUSR1        分割日志
reload      SIGHUP         重新加载配置文件
            SIGHUP           Reload configuration, start the new worker process with a new configuration, and
                             gracefully shut down old worker processes.
            SIGQUIT          Shut down gracefully.  优雅的关闭:有人在访问不会结束进程
            SIGUSR1          Reopen log files.       重新分割日志
            SIGUSR2          Upgrade the nginx executable on the fly.  运行中升级
            SIGWINCH         Shut down worker processes gracefully.    优雅的关闭worker进程,work进程负责处理请求,还有请求不会关闭

image-20230824193732956

实例:

nginx -s   stop   #立即关闭nginx
nginx -s   quit   #优雅退出   不影响业务的状态下退出  等待业务结束后退出
nginx -s   reload #重新加载  

USR1分割日志

[root@localhost logs]# cd /apps/nginx/logs/
[root@localhost logs]# ls
access.log  error.log  nginx.pid
[root@localhost logs]# mv access.log access.log.bak
[root@localhost logs]# touch access.log
#此时日志不会写入到新文件
​
#需要给master 进程发送  USR1信号
​
[root@localhost logs]# cd /apps/nginx/logs/
#却换到日志目录下,默认在安装目录的logs下
[root@localhost logs]# ls
access.log  error.log  nginx.pid
[root@localhost logs]# mv access.log access.log.bak
#将原来的日志文件移动改名
[root@localhost logs]# touch access.log
#创建同名文件
[root@localhost logs]# ps aux |grep nginx
root      18808  0.0  0.0  46156  1144 ?        Ss   12:56   0:00 nginx: master process /apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
nginx     18809  0.0  0.1  48688  1992 ?        S    12:56   0:00 nginx: worker process
root      79419  0.0  0.0 112680   980 pts/0    S+   13:55   0:00 grep --color=auto nginx
[root@localhost logs]# kill -s USR1 18808
使用kill需要进程id
[root@localhost logs]# nginx -s reopen
使用nginx不需要进程号
​

image-20230825140003077

4 指定配置 不已配置文件中的为准

nginx -g 指定配置 不已配置文件中的为准

nginx -g 'user zhangsan;'   已张三身份运行,默认是以nginx身份
要先关闭nginx服务,执行nginx -g 'user zhangsan;' 执行后服务自动开启
nginx -g 'daemon off;'    前台运行命令

5 检查语法格式

nginx -t

2升级 nginx1.18 nginx1.20

 

image-20230214152020207

  1. 将旧Nginx文件换成新Nginx文件(注意备份)

  2. 向master进程发送USR2信号

  3. master进程修改pid文件名,加后缀.oldbin

  4. master进程用新Nginx文件启动新master进程,系统中将有新旧两个Nginx主进程共同提供Web服务

  5. 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止,并删除Nginx.pid.oldbin文件

  6. 向旧master进程发送QUIT信号,关闭老master

  7. 如果发现升级有问题,可以回滚向老master发送HUP,向新master发送QUIT

[root@localhost ~]#ps aux |grep nginx
#先查看是否开启nginx

image-20230825145024487

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
#开启 两核
#user  nobody;
worker_processes  2;  第三行
#worker_processes  1 原来是1核
​
[root@localhost ~]#nginx -s reload
#重新加载配置文件

image-20230825145248479

[root@localhost ~]#ps aux |grep nginx
##此处多了一个子进程

image-20230825145530380

[root@localhost ~]#ps auxf |grep nginx
#查看进程树

image-20230825145705769

[root@localhost ~]#wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /usr/local/src/
#下载安装包到src目录
​
[root@localhost ~]#cd /usr/local/src/
[root@localhost src]#ls
nginx-1.20.2.tar.gz
[root@localhost src]#tar xf nginx-1.20.2.tar.gz 
[root@localhost src]#cd nginx-1.20.2/
[root@localhost nginx-1.20.2]#ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

image-20230825151101542

这时需要重新编译安装   ./configur   安装参数基本一致  这时可以使用 nginx -V  查看
​
#如果 有新模块在后添加即可
[root@localhost nginx-1.20.2]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
​

image-20230825151248898

[root@localhost nginx-1.20.2]#./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
#重新编译

image-20230825152554902

[root@localhost nginx-1.20.2]#make
###########注意不要执行  make install

image-20230825152713806

[root@localhost objs]#cd objs    
#此文件夹中有新版本的nginx  运行程序
[root@localhost nginx-1.20.2]#objs/nginx -v
#查看版本
nginx version: nginx/1.20.2
​

image-20230825153039027

[root@localhost nginx-1.20.2]#mv /apps/nginx/sbin/nginx   /apps/nginx/sbin/nginx.bak
#将低版本的nginx主程序改名
​
[root@localhost nginx-1.20.2]#cp objs/nginx /apps/nginx/sbin/
#将新版本 拷入进去
[root@localhost nginx-1.20.2]# ls /apps/nginx/sbin/
nginx  nginx.bak
​
​
[root@localhost nginx-1.20.2]#/apps/nginx/sbin/nginx -t
#检查下语法问题
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful

image-20230825155439530

[root@localhost nginx-1.20.2]#kill -USR2 `cat /apps/nginx/logs/nginx.pid`
#发送 2 信号   信号在 man手册中可以看到
`cat /apps/nginx/logs/nginx.pid`是存放master pid的位置
#kill -USR2  SIGUSR2动态升级nginx可执行文件。
​
SIGNALS
     The master process of nginx can handle the following signals:
​
     SIGINT, SIGTERM  Shut down quickly.
     SIGHUP           Reload configuration, start the new worker process with a new configuration,
                      and gracefully shut down old worker processes.
     SIGQUIT          Shut down gracefully.
     SIGUSR1          Reopen log files.
     SIGUSR2          Upgrade the nginx executable on the fly.
     #                飞行中升级
     SIGWINCH         Shut down worker processes gracefully.
​
     While there is no need to explicitly control worker processes normally, they support some sig‐
     nals too:
​
     SIGTERM          Shut down quickly.
     SIGQUIT          Shut down gracefully.
     SIGUSR1          Reopen log files.
​

image-20230825160930809

 

[root@localhost nginx-1.20.2]#ps auxf|grep nginx
#生成新的master

image-20230825161353651

[root@localhost nginx-1.20.2]#lsof -i :80
#查看谁在监听 80

image-20230825161507632

检验
[root@localhost html]#dd if=/dev/zero of=/apps/nginx/html/m.img bs=1G count=10
记录了10+0 的读入
记录了10+0 的写出
10737418240字节(11 GB)已复制,16.1164 秒,666 MB/秒
[root@localhost html]#ls
50x.html  index.html  m.img
[root@localhost html]#pwd
/apps/nginx/html

image-20230825161855248

#开启新机器下载
[root@localhost data]#wget --limit-rate=1M http://192.168.1.100/m.img
--2023-08-25 16:37:01--  http://192.168.1.100/m.img
正在连接 192.168.1.100:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:10737418240 (10G) [application/octet-stream]
正在保存至: “m.img”
​
 1% [                                                                             ] 135,512,064 1.00MB/s 剩余 2h 48m
正在保存至: “m.img”

image-20230825163838075

#回到网页服务器
[root@localhost html]#ss -ntap|grep 80
#查看那个进程在管理 下载

image-20230825164246951

 

[root@localhost html]# ls /apps/nginx/logs/
access.log  error.log  nginx.pid  nginx.pid.oldbin
#会有 新老两个进程
nginx.pid  nginx.pid.oldbin
[root@localhost logs]# cat nginx.pid
111129
#新版本nginxpid
[root@localhost logs]# cat nginx.pid.oldbin
18808
#旧版本nginxpid
[root@localhost logs]#
​
​

 

image-20230825164705427

[root@localhost logs]# kill -WINCH `cat /apps/nginx/logs/nginx.pid.oldbin`
#优雅关闭老进程的  worker 进程
​
#再开启一台服务器测试 是否是新的进程 在下载
[root@localhost ~]# wget --limit-rate=1M http://192.168.1.100/m.img
--2023-08-25 16:53:46--  http://192.168.1.100/m.img
正在连接 192.168.1.100:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:10737418240 (10G) [application/octet-stream]
正在保存至: “m.img.2”
​
 2% [=>                                                                                                 ] 296,308,152 1.00MB/s 剩余 2h 45m 
 
 #回到网页服务器可以看到  
 [root@localhost logs]# ss -natp | grep *:80
​
测试一段时间无问题  就可以了,如果断掉第一个 下载 ,老的进程就关闭了
[root@localhost html]#pstree -p |grep nginx
#查看进程关系     1.18   
[root@localhost sbin]# ps aux |grep nginx
​

image-20230825170943799

image-20230825170929651

3回滚

[root@localhost man]#kill -HUP `cat /apps/nginx/run/nginx.pid.oldbin`
#唤起老的进程
[root@localhost man]#ps aux|grep nginx
#又有两个master

image-20230825171253834

#优雅退出新进程
kill -QUIT `cat /apps/nginx/run/nginx.pid`   新的进程
[root@localhost sbin]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Fri, 25 Aug 2023 09:14:47 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Thu, 24 Aug 2023 10:40:27 GMT
Connection: keep-alive
ETag: "64e7339b-264"
Accept-Ranges: bytes
​
#旧的nginx服务被唤醒使用
​

image-20230825171619242

 

标签:logs,--,平滑,apps,升级,nginx,2nginx,root,localhost
From: https://www.cnblogs.com/sl08/p/17660142.html

相关文章

  • Tita 升级|便捷查看「我的/ta 的」总结提交情况
    一、单人提交情况看板的查看Tita-OKR和新绩效一体化管理平台无论是在「我的总结」中查看自己的总结提交,还是单独查看下属、共享人、或者是搜索某一位同事进行总结的查看,都会在页面右侧看到这个人总结提交情况的统计看板,在看板中可以看到这一员工是否提交了总结,是按时提交还是......
  • 升级到DBeaver Community 23.1.5 部分汉化失效解决
    升级到DBeaver到23.1.5之后部分中文有不能显示了,虽然也不影响什么但是对于我这个轻微强迫症还是希望能全部汉化。一个网友告诉我不是DBeaver本身汉化部分的问题,是Eclipse本身汉化部分没有安装的问题更新到23.1.5之后手动安装一下babel汉化  下面是babel地址: h......
  • 快速成长的秘诀|如何实现自我认知升级?
    本文是技术人成长系列文章,作者期望透过这些真实的技术成长经验,给到读者一些有益的启发。一、写在开始精英人数的增长速度持续加快后,很多人开始焦虑,我也焦虑,深知要走出焦虑不容易,我想把走出焦虑快速成长的认知和方法写成文章分享给更多人,做成PPT给更多人面对面分享。快速......
  • 版本升级 | v1.0.13发布,传下去:更好用了
    新发行版来啦~本次更新主要聚焦兼容性的提升及结果报告格式的增加,另外对部分解析逻辑及使用体验进行了优化。在这里特别鸣谢大佬@Hugo-X在社区仓库提交的PR~后续,OpenSCA项目组会继续致力于完善本地能力闭环,覆盖更多场景。 v1.0.13更新内容本地漏洞库兼容多数据格式支......
  • 蒟蒻的升级之路
    https://www.noi.cn/upload/resources/file/2023/03/15/1fa58eac9c412e01ce3c89c761058a43.pdf更新ing...线段树树状数组根号分治数位dp主席树CDQ分治三维偏序线性基可撤销并查集分治背包分块二分按秩合并并查集phiodtset WQS二分......
  • 版本升级 | v1.0.13发布,传下去:更好用了
    新发行版来啦~本次更新主要聚焦兼容性的提升及结果报告格式的增加,另外对部分解析逻辑及使用体验进行了优化。在这里特别鸣谢大佬@Hugo-X在社区仓库提交的PR~后续,OpenSCA项目组会继续致力于完善本地能力闭环,覆盖更多场景。v1.0.13更新内容本地漏洞库兼容多数据格式支持SQLite、CSV格......
  • iOS开发之--苹果个人开发者账号如何升级成公司账号
    1.拨打苹果针对中国区开发者的咨询服务热线:40067018552.简单向对方(中文不太标准,但听懂没问题)说明意图后,会要求提供:(1)之前申请IDP时purchaseform上的personID,EnrollmentID(2)开发者账号,3.对方会直接帮忙升级账户届时会需要提供一些公司相关的资料传真过去,包括:《企业法......
  • Tita 升级|后台新增「业务操作日志」,加强企业数据安全
    业务操作日志1.在哪查看?超管与后台管理员可进入【企业管理后台-企业安全-业务操作日志】中查看2.哪些操作可被统计?所有删除动作删除目标、关键成果、任务、项目、考核活动、考核模板;删除对关键成果、任务、项目填写的进展;删除对目标、关键成果的复盘2. 部分编辑......
  • 主从升级(mysql5.7.39-mysql8.0.25)
    环境:OS:Centos7当前数据库版本:5.7.39(主从目前启用了审计server_audit.so,master_auto_position=1)计划升级的数据库版本:8.0.28升级顺序:先升级从库########################从库机器上的操作######################1.从库机器上安装好新版本的mysql注意端口和socket不能与......
  • 【疑难杂症】升级Mac系统后python遇到[SSL: CERTIFICATE_VERIFY_FAILED]
    [本文出自天外归云的博客园]同事升级Mac电脑版本后,遇到了[SSL:CERTIFICATE_VERIFY_FAILED]报错:<urlopenerror[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfailed:unabletogetlocalissuercertificate(_ssl.c:1131)>error:<urlopenerror[SSL:CERTIFICATE_......