Nginx系列p2:重载,热部署,日志分割
今天我们来学习 nginx 的 重载、热部署、日志分割功能
重载:当我们需要修改配置文件中的一些值,我们可以直接修改该配置文件,然后重新启动 nginx 服务,就可以实现在 nginx 不停止服务的情况下,使用了我们最新修改过的配置文件。
重载example:
step1:
# 打开配置文件,设置配置文件中的 tcp_nopush 选项为开启,然后保存退出
$ vim conf/nginx_conf
step2: 重新启动 nginx 服务,此时 nginx 服务就可以使用新的配置文件了
$ sudo ./nginx -s reload
热部署:我们在不停止服务的情况下,对 nginx 重新进行部署。比如我们升级了 nginx 版本(又称版本升级),则该功能可以使我们的应用平滑的过渡到新部署的高版本的 nginx 服务上。
热部署 example:
step1: 首先以同样的方式编译更高版本的 nginx, 然后将高版本的 sbin/nginx 二进制可执行文件替换掉我们要升级的 nginx 服务用的 nginx 文件
# 注:该旧版本 nginx 服务正在运行的情况下进行下述操作 # 本机器开启的 nginx 服务版本为 nginx-1.12.2 # 重新编译的 nginx 版本为 nginx-1.16.1,安装目录为 nginx-16 文件夹下 # 用新编译生成的 nginx 二进制文件覆盖掉正在使用的 nginx 旧版本二进制文件 $ mv nginx nginx.old // 备份一下旧版本的 nginx 文件 $ sudo cp /home/zhangpeng/nginx-16/sbin/nginx ./
此时查看一下我们正在运行的 nginx 服务:
注:从上图可以看出 master 进程的 PID 为 3278,worker 进程的 PID 为 3287,父进程为 master 进程
step2: 向 master 进程发送 USR2 信号,此时再查看一下 nginx 进程
$ sudo kill -USR2 3278
注:此时我们观察可以发现:给老的 master 进程发送 USR2 信号后,老的 master 进程生成了新 master, 新的 master 生成了新的 worker。同时老的 nginx 进程就不再监听 80 号端口了,这样就可以实现从老的 nginx 服务到新的 nginx 服务进行平滑过渡了。
step3:向老的 nginx master 进程发送 WINCH 信号告诉 master 进程请优雅的关闭你的 worker 进程
注:此时可以发现:老的 nginx master 中的 worker 都已经全部关闭了,但是此时老的 nginx master 进程还存在。存在的原因是:有些情况下我们需要将版本退回到旧的版本,这时,我们就可以根据老的 nginx master 把它的 worker 进程再拉起来!(发送 RELOAD 信号拉起 worker,然后再关闭新的 master 进程就可以了)
日志分割:在 nginx 不停止运行的情况下,把当前的日志备份到另外一个文件中。
日志分割 example:
# 进入 logs 目录 # 将 error.log 备份为 error.log.bak 文件 # 此时重新开启 nginx 服务,发送 reopen 信号,会重新生成一个新的 error.log 文件 # 中间的日志文件不会有缺少 $ mv error.log error.log.bak $ sudo ../sbin/nginx -s reopen
注:但是正常情况下,我们不会这样使用,我们一般会编写一个日志分割的脚本文件,然后定时执行这个脚本文件即可。一般我们用 crontab 来开启定时计划,在 Ubuntu 下,是系统默认安装的,直接使用即可,我会在 Ubuntu 分类下单独写一篇博客来介绍 crontab 的使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗