原文

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是否有日志)

  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信号,让其优雅的退出。

Nginx-3.控制nginx的更多相关文章

  1. SHELL编写NGINX服务控制脚本

    使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的 ...

  2. 运行和控制Nginx

    Nginx命令行选项 启动.停止.重启nginx命令 如何重新加载nginx配置文件 nginx程序不重启平滑升级可执行文件   nginx命令行参数 不像许多其他软件系统,Nginx 仅有几个命令行 ...

  3. 运行和控制Nginx——命令行参数和信号

    参考资料: Nginx中文文档: http://www.nginx.cn/nginxchscommandline Nginx的启动.停止.平滑重启.信号控制和平滑升级:http://zachary-g ...

  4. 控制nginx并发链接数量和客户端请求nginx的速率

    一.控制nginx并发链接数 ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数. 不是所有的链接数都会被计数,一个符合计数要求的连接 ...

  5. 使用python控制nginx禁封ip

    python控制nginx禁封ip nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢? 测试准备: 两个tomcat,一个nginx做均衡负载,服务 ...

  6. 如何源码编译安装并控制nginx

    安装nginx 注意 Linux操作系统需要2.6及其以上的内核(支持epoll) 使用nginx的必备软件 gcc编辑器 yum -y install gcc gcc-c++ pcre库(支持正则表 ...

  7. Nginx 目录结构、Nginx服务控制命令

    # Nginx目录结构 # 首先推荐一个查看目录结构的工具 tree # yum install -y tree # sudo apt-get install -y tree ubuntu # 查看n ...

  8. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  9. Nginx配置文件(nginx.conf)配置详解(2)

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

  10. linux下配置nginx使用service nginx start 服务

    解压出来后执行 mkdir /var/tmp/nginx/client/ -pv 接下来我们简单的为它提供一个服务脚本吧! # vim  /etc/init.d/nginx 新建文件/etc/rc.d ...

随机推荐

  1. uredis ------ 异步 redis 封装的访问库(c++),基于hiredis.

    详见 github : https://github.com/uniqss/uredis 底层使用hiredis库,使用libuv库. 只支持异步 支持分表分库,一般是用玩家的ID去取模,比如分库10 ...

  2. 从零开始学习redis源码

    2020的开年是比较艰难的,爆发了肺炎疫情,希望大家多注意安全,也希望疫情早日好转! 以3.2版本的源码为例,开始讲解,有时会贴出源码,进行说明,并会注明源码出处. 数据库 应该都知道默认redis会 ...

  3. MBMD(MobileNet-based tracking by detection algorithm)作者答疑

    If you fail to install and run this tracker, please email me (zhangyunhua@mail.dlut.edu.cn) Introduc ...

  4. CodeIgniter框架使用总结

    CodeIgniter框架 1.回忆MVC 1.1.M:模型,提供数据,保存数据 1.2.V:视图,只负责显示,表单form 1.3.C:控制器,协调模型和视图 1.4.action:动作,是控制器中 ...

  5. Import This - The Zen of Python

    The Zen of Python -- by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Si ...

  6. JAVA 对守护线程的理解

    1.在start之前,setDaemon. 该现场就成为守护线程了. 2.守护现线程并不是主线程结束,子线程(守护线程)也跟着结束.而是守护线程在没有用户线程运行的情况伴随着JVM退出而结束. 示例代 ...

  7. Metasploit学习笔记(一) Samba服务 usermap_script安全漏洞相关信息

    一.Samba介绍 Samba是linux和unix系统上实现smb协议的一个免费软件,由客户机和服务器构成.SMB是一种在局域网上实现共享文件和打印机的协议.存在一个服务器,客户机通过该协议可以服务 ...

  8. Kali桥接模式下配置ip

    以管理员身份运行虚拟机 打开控制面板-->网络和Internet-->更改适配器 再在虚拟机处桥接到这个WLAN2 点击 编辑-->编辑虚拟网卡 没有网卡就点上图的添加网络作为桥接网 ...

  9. ansible----sudo

    ansible 执行sudo的root命令,参看https://www.cnblogs.com/infaaf/p/10049896.html [nnn]103 ansible_ssh_host=10. ...

  10. [Linux]curl 测试socket http代理

    Socket5 curl --socks5 10.2.46.19:10808 http://www.baidu.com #-----查询结果----- <!DOCTYPE html> &l ...