Nginx信号

一、Nginx信号机制说明

nginx是通过master进程和worker进程提供服务的。master进程主要用来监控worker进程工作状态进行相应重     启、停止等操作。
        worker进程则进行具体提供服务,接受请求和处理请求。那么既然提到master监听worker进程,就势必用到进    程间通信。常见的进程   间通信也无非那几种方式,内存,消息队列,socket,信号等。在nginx中是采用了共   享内存,socket与信号三种方式。 
        在master和worker进程之间的通信则是通过套接字对的方式。而我们和nginx之间通信的方式则采用信号方式。 在使用nginx过程中,我们可以直接通信的就是只有master进程,对于worker进程我们除了可以决   定其个数之外是无法直接控制worker进程   的。唯一控制worker进程的方式就是通过向master进程发出相应的信   号,master进程通过不同的信号来对worker进程进行控制,依此   种方式达到我们控制worker进程。 
 

二、Nginx支持的信号种类
 

类型描述
TERM | INT快速关闭
QUIT    从容关闭
HUP  平滑重启,重新加载配置文件
USR1  重新打开日志文件,主要用于日志文件的分割
USR2 平滑升级可执行程序
WINCH    从容关闭工作进程

三、如何向master进程发送信号

 有两种发送信号方式:一种利用系统kill命令,一种是nginx命令。
 1. kill -s SIG nginx_pid

# 如:重新加载nginx配置文件而不重新启动服务
shell> kill -s HUP `cat /var/run/nginx.pid` 

 2.nginx -s SIG   

 -s 支持的信号为:

stop         SIGTERM
quit          SIGQUIT
reopen     SIGUSR1
reload      SIGHUP

示例:

shell> nginx -s stop
shell> nginx -s reload

四、信号的应用

1.  启动nginx

# 说明:-c 指定配置文件运行nginx,若不指定配置文件,则会默认加载安装目录的conf子目录的nginx.conf文件
shell> nginx  -c /path/to/conf     

2. 停止nginx

2.1 快速停止nginx

# 说明:直接向nginx主进程发送停止信号,通过进程pid文件可直接查询pid号
[root@localhost ~]# kill -TERM|INT  `cat /path/to/nginx.pid`

2.2 从容停止nginx

[root@localhost ~]# kill -QUIT `cat /path/to/nginx.pid` 

3. 平滑重启nginx

 若修改配置文件想重启nginx服务重新加载配置文件,则可以向nginx主进程发送HUP信号,当nginx主进程接收到信号以后,会先解析配置文件,如果成功,就应用新的配置文件。nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字,但是继续为当前连接的客户提供服务。所有的客户端的服务完成后,旧的工作进程被关闭。如果新的配置文件应用失败,nginx 将继续使用旧的配置文件进行工作。

3.1 重启服务前应先检查配置文件是否正确

#  -t 参数用于检查配置文件语法是否正确
[root@localhost ~]# nginx -t  -c /path/to/nginx.conf             

3.2 平滑重启命令

[root@localhost ~]# kill  -HUP `cat  /path/to/nginx.pid` 

4. nginx 的平滑升级

 当需要将正在运行中的 nginx 升级、添加/删除服务器模块时,在不中断服务的情况下,使用新版本重新编译的 nginx 可执行程序替换旧版本的可执行程序。

步骤一:使用新的可执行程序替换旧的可执行程序,对于编译安装的 nginx,可以将新版本编译安装到旧版本的 nginx 安装路径中。替换之前,最好备份一下旧的可执行文件。

步骤二: 向nginx主程序发送USR2指令

[root@localhost ~]# kill -USR2 `cat /path/to/nginx.pid`

步骤三:旧版本 nginx 的主进程将重命名它的 pid 文件为 .oldbin(例如:/var/run/nginx.pid.oldbin),然后执行新版本的 nginx 可执行程序,依次启动新的主进程和新的工作进程。

步骤四:此时,新、旧版本的 nginx 实例会同时运行,共同处理输入的请求。要逐步停止旧版本的 nginx 实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

[root@localhost ~]#  kill -WINCH `cat /path/to/nginx.pid.oldpid`

步骤五: 一段时间后,旧的工作进程(worker process)处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了。

步骤六:这时候,可以决定是使用新版本,还是恢复到旧版本:

  1. kill -HUP 【旧的主进程号】:nginx 将在不重载配置文件的情况下启动它的工作进程 
  2. kill -QUIT 【新的主进程号】:从容关闭其工作进程(worker process) 
  3. kill -TERM 【新的主进程号】:强制退出 
  4. kill 【新的主进程号或旧的主进程号】:如果因为某些原因新的工作进程不能退出,则向其发送 kill 信号 

步骤七:  新的主进程退出后,旧的主进程会移除 .oldbin 后缀,恢复为它 的 .pid 文件,这样,一切就恢复到升级之前了。如果尝试升级成功,希望保留新的服务器时,可发送 QUIT 信号给旧的主进程,使其退出而只留下新的服务器运行。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值