zoukankan      html  css  js  c++  java
  • Nginx-3.控制nginx

    原文

    nginx 通过信号来控制。对应linux系统就是用kill命令。

    The command kill sends the specified signal to the specified process or process group. If no signal is specified, the TERM signal is sent.

    master进程id在默认写入到/nginx/logs/nginx.pid文件中。文件也可以在nginx.conf文件中指定。master进程支持以下信号:

    kill -TERM `cat ./logs/nginx.pid` #快速停止master进程。
    kill -QUIT `cat ./logs/nginx.pid` #优雅的停止。
    kill -HUB `cat ./logs/nginx.pid` #改变配置文件。开启一个新的worker进程处理,优雅的停止老的worker 进程。相当于nginx -s reload
    kill -USR1 `cat ./logs/nginx.pid` #重新打开log文件。-s reopen命令
    kill -USR2 `cat ./logs/nginx.pid` #升级可执行文件。热部署
    kill -WINCH `cat ./logs/nginx.pid` #优雅的关闭worker进程。
    

    每个worker进程也可以接收信号:

    kill -TERM xxx #快速关闭worker进程
    kill -QUIT xxx #优雅退出
    kill -USR1 xxx #重新打开日志文件,先mv一个,再去执行这个命令。-s reopen命令
    

    更改配置文件

    1. 发送HUP信号给master进程。
    2. master检查新的配置文件语法是否合理。
    3. 如果合理,根据新的配置文件打开新的socket连接监听。会创建新的worker进程,然后通知老的worker进程优雅的关闭。老进程收到消息后完成当前客户端的请求,然后自动关闭。
    4. 如果不合理,回滚,使用原先的配置文件继续运行。

    日志切割

    1. 手动重命名log文件。
    2. 给master进程发送USR1信号。
    3. 重新打开文件。

    热部署

    1. 备份一下原先的nginx文件。

    2. 把新的nginx二进制文件放到原先相同目录下。

    3. 给master进程发送USR2信号。

    4. master进程会把logs/nginx.pid文件复制一份为logs/nginx.pid.oldbin,然后运行新的nginx文件,生成新的worker进程。

    5. 新老master和worker共存。(如果没有成功可以看logs/error.log是否有日志)

      img

    6. 给老master进程发送WINCH信号,老master就会发送信号让他对应的worker进程优雅的退出。QUIT信号。

    7. 然后就剩新的master和worker进程,以及老的master进程。

    注意:老的master进程不会退出。可以用于必要时候的回滚操作。有两种情况。

    • 给老的master进程发送HUP信号,它会以不读取nginx.conf的方式启动新的worker进程。然后再给新的master进程发送QUIT信号让他优雅的退出。
    • 给新的master进程发送TERM信号,它会通知自己的worker进程立即退出。如果退出不成功,使用kill让worker进程强制退出。新的master退出之后,老的master进程会自动启动新的worker进程。

    如果回滚,那么第四步的nginx.pid.oldbin文件会被丢弃。

    如果升级成功,就给老的master进程发送QUIT信号,让其优雅的退出。

  • 相关阅读:
    堆排序(改进的简单选择排序)
    希尔排序(改进的直接插入排序)
    直接插入排序
    简单选择排序
    冒泡排序&排序算法简介
    处理器的体系结构
    虚拟存储器
    Python函数
    在主项目中添加子项目
    聚合分组查询
  • 原文地址:https://www.cnblogs.com/sheldon-lou/p/12355173.html
Copyright © 2011-2022 走看看