企业架构LNMP学习笔记10
1、Nginx版本,在实际的业务场景中,需要使用软件新版本的功能、特性。就需要对原有软件进行升级或重装系统。
Nginx的版本需要升级迭代。那么如何进行升级呢?线上服务器如何升级,我们选择稳定版本。
从nginx的1.14版本升级到nginx的1.16版本。
平滑升级。
信号参数:

信号参数:
kill命令传输信号给进程nginx的主进程。
TERM, INT(快速退出,强制退出,当前的请求不执行完成就退出) -s stop
QUIT (优雅退出,执行完当前的请求后退出) -s quit
HUP (重新加载配置文件,用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程) -s reload
USR1 (重新打开日志文件) -s reopen
USR2 (平滑的升级nginx二进制文件 拉起一个新的主进程 旧主进程不停止)
WINCH (优雅的关闭worker进程)
我们平滑升级USR2,这个信号要注意下。
以上几个信号命令都是发给nginx的master主进程。
语法:
[root@server01 ~]# ps aux |grep nginx
root 937 0.0 0.1 46156 2100 ? Ss 09:41 0:00 nginx: master process /usr/local/nginx/sbin/nginx
www 26449 0.0 0.0 46392 1956 ? S 17:32 0:00 nginx: worker process
root 26474 0.0 0.0 112816 972 pts/0 S+ 18:11 0:00 grep --color=auto nginx
[root@server01 ~]# kill -TERM 937
[root@server01 ~]# ps aux |grep nginx
root 26480 0.0 0.0 112812 972 pts/0 S+ 18:11 0:00 grep --color=auto nginx
不是所有的软件都支持kill信号方面的内容。要看软件是怎么写出来的。
nginx是支持这几个的。
WINCH:
[root@server01 ~]# ps aux |grep nginx
root 26534 0.0 0.0 46016 1348 ? Ss 18:13 0:00 nginx: master process /usr/local/nginx/sbin/nginx
www 26539 0.0 0.0 46392 1920 ? S 18:17 0:00 nginx: worker process
root 26541 0.0 0.0 112812 968 pts/0 S+ 18:17 0:00 grep --color=auto nginx
[root@server01 ~]# kill -WINCH 26534
[root@server01 ~]#
[root@server01 ~]# ps aux |grep nginx
root 26534 0.0 0.0 46016 1348 ? Ss 18:13 0:00 nginx: master process /usr/local/nginx/sbin/nginx
root 26543 0.0 0.0 112812 972 pts/0 S+ 18:18 0:00 grep --color=auto nginx
[root@server01 ~]#
我们可以看到worker进程被关闭了。那么这个时候访问页面访问不了。说明worker不工作,nginx就不工作。这个是比较特殊的场景。
[root@server01 ~]# kill -HUP 26534
[root@server01 ~]#
[root@server01 ~]# ps aux |grep nginx
root 26534 0.0 0.1 46152 2064 ? Ss 18:13 0:00 nginx: master process /usr/local/nginx/sbin/nginx
www 26544 0.0 0.0 46528 1972 ? S 18:21 0:00 nginx: worker process
root 26546 0.0 0.0 112812 972 pts/0 S+ 18:21 0:00 grep --color=auto nginx
我们通过kill -HUP PID命令来重新加载配置文件,启动新的worker进程,优雅地关闭旧的worker进程。
[root@server01 ~]# ps aux |grep mysqld
root 918 0.0 0.0 115544 1696 ? S 09:41 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/server01.pid
mysql 1073 0.0 22.4 968628 454524 ? Sl 09:41 0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/server01.err --pid-file=/usr/local/mysql/data/server01.pid
root 26561 0.0 0.0 112816 972 pts/0 S+ 18:25 0:00 grep --color=auto mysqld
[root@server01 ~]# kill -QUIT 918
[root@server01 ~]# ps aux |grep mysqld
root 918 0.0 0.0 115544 1696 ? S 09:41 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/server01.pid
mysql 1073 0.0 22.4 968628 454524 ? Sl 09:41 0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/server01.err --pid-file=/usr/local/mysql/data/server01.pid
root 26563 0.0 0.0 112816 972 pts/0 S+ 18:26 0:00 grep --color=auto mysqld
[root@server01 ~]#
我们可以看到-QUIT这个信号,mysqld就不支持。但是php-fpm又支持。
在脚本中,stop对应的kill -QUIT,优雅退出。
重新安装:
1)停止掉服务,删除编译的安装的软件包和源码包;
2)重新解压编译安装即可;
注意:如果需要,请备份配置文件和网站目录里的资源文件。
一些重要的东西,网站文件和配置文件要进行备份。
平滑升级:
升级软件版本之后,需要启动新的版本,启动不了,端口已被占用。
如果直接把旧版本的服务停止掉,会影响线上业务的使用。
最佳解决办法:①旧的不先停掉②新的又可以起来③旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程-USR2 平滑启动一个进程(平滑升级)-WINCH 优雅的关闭子进程-QUIT 优雅关闭主进程
shell > tar xvf nginx-1.16.0.tar.gz
shell > cd nginx-1.16.0
shell > ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
shell > make && make install
升级新版本,需要把软件的安装路径,指定到旧版本上。
以上操作完成之后,会把原来的旧版本备份为nginx.old
新旧版本同时运行:
kill -USR2 主进程号
停止掉旧进程
查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程
shell > kill -WINCH 旧的主进程号
shell > kill -QUIT 旧的主进程号
[root@server01 nginx-1.24.0]# cat Makefiledefault: buildclean:rm -rf Makefile objs.PHONY: default cleanbuild:$(MAKE) -f objs/Makefileinstall:$(MAKE) -f objs/Makefile installmodules:$(MAKE) -f objs/Makefile modulesupgrade:/usr/local/nginx/sbin/nginx -tkill -USR2 `cat /usr/local/nginx/logs/nginx.pid`sleep 1test -f /usr/local/nginx/logs/nginx.pid.oldbinkill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

说明:
1)先对配置文件进行测试;
2)然后平滑启动一个新nginx进程。
3)判断下旧进程是否存在;
4)然后再将旧nginx进程进行优雅退出。
在nginx中,默认提供了平滑升级的操作。
#注意先configure 在nginx源码包执行
shell > make install && make upgrade
注意:要make install && make upgrade。
相关文章:
企业架构LNMP学习笔记10
1、Nginx版本,在实际的业务场景中,需要使用软件新版本的功能、特性。就需要对原有软件进行升级或重装系统。 Nginx的版本需要升级迭代。那么如何进行升级呢?线上服务器如何升级,我们选择稳定版本。 从nginx的1.14版本升级到ngin…...
[国产MCU]-W801开发实例-I2C控制器
I2C控制器 文章目录 I2C控制器1、I2C控制器介绍2、I2C驱动API2、I2C简单使用示例1、I2C控制器介绍 I2C总线是一种简单、双向二线同步串口总线。I2C总线设备之间通信只需两根线即可完成设备之间的数据传输。 I2C总线设备分为主机和从机,这取决于数据传输方向。I2C总线上的主机…...
植物根系基因组与数据分析
1.背景 这段内容主要是关于植物对干旱胁迫的反应,并介绍了生活在植物体内外以及根际的真菌和细菌的作用。然而,目前对这些真菌和细菌的稳定性了解甚少。作者通过调查微生物群落组成和微生物相关性的方法,对农业系统中真菌和细菌对干旱的抗性…...
2.3 数据模型
思维导图: 前言: 我的理解: 这段话介绍了概念模型和数据模型之间的关系,以及数据模型的定义和重要性。具体解读如下: 1. **概念模型**:它是一种描述现实世界数据关系的抽象模型,不依赖于任何…...
RT-Thread 中断管理学习(一)
中断管理 什么是中断?简单的解释就是系统正在处理某一个正常事件,忽然被另一个需要马上处理的紧急事件打断,系统转而处理这个紧急事件,待处理完毕,再恢复运行刚才被打断的事件。生活中,我们经常会遇到这样…...
学习周报9.3
文章目录 前言文献阅读一摘要挑战基于时间序列的 GAN 分类 文献阅读二摘要介绍提出的模型:时间序列GAN (TimeGAN) 代码学习总结 前言 本周阅读两篇文献,文献一是一篇时序生成方面的综述,主要了解基于时间序列 的GAN主要分类以及时间序列GAN方面面临的一…...
win10 查看指定进程名的端口号
在 Windows 10 的任务管理器中也可以查看端口号。请按下面的步骤操作: 打开任务管理器,可以通过按下快捷键 CtrlShiftEsc 或者右键点击任务栏后选择任务管理器来打开。点击“性能”选项卡,然后点击左侧的“打开资源监视器”。在资源监视器中…...
函数的递归调用
1、什么是函数的递归调用? 其实说白了就是在函数的内部再调用函数自己本身 function fun(){fun() } 2、用递归解决问题的条件 (1)一个问题是可以分解成子问题,子问题的解决办法与最原始的问题解决方法相同 (2&…...
李宏毅机器学习笔记:RNN循环神经网络
RNN 一、RNN1、场景引入2、如何将一个单词表示成一个向量3种典型的RNN网络结构 二、LSTMLSTM和普通NN、RNN区别 三、 RNN的训练RNN与auto encoder和decoder 四、RNN和结构学习的区别 一、RNN 1、场景引入 例如情景补充的情况,根据词汇预测该词汇所属的类别。这个时…...
基于JavaWeb和mysql实现校园订餐前后台管理系统(源码+数据库)
一、项目简介 本项目是一套基于JavaWeb和mysql实现网上书城前后端管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都…...
CNN 01(CNN简介)
一、卷积神经网络的发展 convolutional neural network 在计算机视觉领域,通常要做的就是指用机器程序替代人眼对目标图像进行识别等。那么神经网络也好还是卷积神经网络其实都是上个世纪就有的算法,只是近些年来电脑的计算能力已非当年的那种计算水平…...
AI大模型的使用-让AI帮你写单元测试
1.体验多步提示语 我们本节就让AI帮我们写一个单元测试,全程用AI给我们答案,首先单元测试前需要有代码,那么我们让AI给我们生成一个代码,要求如下: 用Python写一个函数,进行时间格式化输出,比…...
vscode调教配置:快捷修复和格式化代码
配置vscode快捷键,让你像使用idea一样使用vscode,我们最常用的两个功能就是格式化代码和快捷修复,所以这里修改一下快捷修复和格式化代码的快捷键。 在设置中,找到快捷键配置: 然后搜索:快捷修复 在快捷键…...
pear admin 后端启动
pear admin 后端启动 一、项目结构二、启动 一、项目结构 应用结构: Pear Admin Flask ├─applications # 应用 │ ├─rights # │ ├─system # 静态资源文件 │ ├─users # │ └─views # 视图部分 ├─common # 公共模块 ├─models # 数据模…...
C++:输出系统时间(及报错处理)
#include <iostream> #include <ctime>using namespace std;int main() {// 基于当前系统的当前日期/时间time_t now time(0);cout << "1970 到目前经过秒数:" << now << endl;tm* ltm localtime(&now);// 输出 tm 结构的各个组…...
使用Windbg动态调试排查软件启动不了的问题
目录 1、问题说明 2、初步分析 3、使用Windbg启动程序进行动态调试 4、进一步分析 5、何时使用Windbg静态分析?何时使用Windbg进行动态调试? 6、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&…...
Swift 技术 视频播放器滚动条(源码)
一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络࿰…...
PixelSNAIL论文代码学习(2)——门控残差网络的实现
文章目录 引言正文门控残差网络介绍门控残差网络具体实现代码使用pytorch实现 总结 引言 阅读了pixelSNAIL,很简短,就用了几页,介绍了网络结构,介绍了试验效果就没有了,具体论文学习链接 这段时间看他的代码,还是挺痛…...
WebGPU学习(9)---使用Pipeline Overridable Constants
使用Pipeline Overridable Constants WebGPU 的着色器语言是 WGSL,但与 GLSL 和 HLSL 不同,不支持 #ifdef 等宏。为了实现各种着色器变体,迄今为止,宏一直是着色器编程中非常重要的功能。那么应该如何处理没有宏的 WGSLÿ…...
javaweb入门版学生信息管理系统-增删改查+JSP+Jstl+El
dao public class StudentDao {QueryRunner queryRunner QueryRunnerUtils.getQueryRunner();//查询全部学生信息public List<Student> selectStudent(){String sql "select * from tb_student";List<Student> students null;try {students queryRunn…...
三步解锁wxappUnpacker:从小白到高手的蜕变指南
三步解锁wxappUnpacker:从小白到高手的蜕变指南 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 工具定位:小程序逆向工程的瑞士军刀 wxappUnpacker是一款专注于微信小程序解包的开源工具集&am…...
Ubuntu 20.04 LTS下Miniconda3安装与配置全攻略(含常见错误解决)
Ubuntu 20.04 LTS下Miniconda3安装与配置全攻略(含常见错误解决) 如果你正在Ubuntu 20.04 LTS上搭建Python开发或数据科学环境,Miniconda3绝对是一个值得考虑的选择。作为Anaconda的精简版,它保留了核心的conda包管理功能&#x…...
PaddleOCR服务化部署实战:从Python Pipeline到C++,性能提升2倍+的保姆级教程
PaddleOCR高并发服务化部署实战:Python到C的性能跃迁指南 当文档批量处理系统每天需要解析十万级图片,或是金融票据识别平台面临秒级响应需求时,Python部署的OCR服务常会遭遇性能瓶颈。本文将揭示如何通过C部署方案实现QPS从23到51的跨越式提…...
原神抽卡数据分析工具:智能解析与可视化全攻略
原神抽卡数据分析工具:智能解析与可视化全攻略 【免费下载链接】genshin-wish-export biuuu/genshin-wish-export - 一个使用Electron制作的原神祈愿记录导出工具,它可以通过读取游戏日志或代理模式获取访问游戏祈愿记录API所需的authKey。 项目地址: …...
在Aspen Plus中用Linde - Hampson工艺液化CO₂:从燃煤电厂捕获气体的模拟探索
在 Aspen Plus 中使用 Linde-Hampson 工艺液化CO2该模拟使用 Aspen Plus 对从燃煤电厂捕获的富含二氧化碳的气体进行液化。在应对气候变化的征程中,二氧化碳捕获与封存(CCS)技术愈发关键。从燃煤电厂捕获富含二氧化碳的气体并将其液化&#x…...
Java八股文实战:从cv_resnet101模型服务理解RPC与序列化
Java八股文实战:从cv_resnet101模型服务理解RPC与序列化 你是不是也遇到过这种情况?面试时被问到“RPC和HTTP有什么区别?”、“序列化协议怎么选?”,脑子里全是书本上的概念,什么“远程过程调用”、“轻量…...
QMK Toolbox终极指南:轻松掌握机械键盘固件部署与定制
QMK Toolbox终极指南:轻松掌握机械键盘固件部署与定制 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox QMK Toolbox是一款功能强大的开源键盘固件部署工具,专为QMK…...
YOLO X Layout与Python结合实战:自动化文档结构解析应用
YOLO X Layout与Python结合实战:自动化文档结构解析应用 1. 项目背景与价值 在日常工作中,我们经常会遇到大量需要处理的文档——扫描的合同、电子发票、研究报告、技术文档等等。传统的人工处理方式不仅效率低下,还容易出错。想象一下&…...
西北工业大学GeekOS实验踩坑记:从分段到分页,手把手教你搞定Project4的虚拟内存
西北工业大学GeekOS实验深度解析:虚拟内存实现与优化实战 实验背景与核心挑战 操作系统课程中的GeekOS项目一直是计算机专业学生深入理解系统底层原理的重要实践环节。Project4作为其中的关键里程碑,要求学生从分段存储管理过渡到分页虚拟内存系统的实…...
nli-distilroberta-base实际作品:金融风控报告语义一致性检测效果可视化
nli-distilroberta-base实际作品:金融风控报告语义一致性检测效果可视化 1. 项目背景与价值 在金融风控领域,报告文档的语义一致性检测是确保业务合规性的关键环节。传统人工审核方式效率低下且容易遗漏细节,而基于自然语言理解(NLI)的技术…...
