美文网首页
Nginx 信号量 [1]

Nginx 信号量 [1]

作者: 大鱼炖海棠 | 来源:发表于2019-05-30 19:57 被阅读0次

Nginx信号控制官方链接:https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/

信号控制与进程管理

1. 启动Nginx

[root@localhost nginx]# sbin/nginx 
[root@localhost nginx]# ps -ef | grep nginx
root       1189      1  0 18:34 ?        00:00:00 nginx: master process sbin/nginx
nobody     1190   1189  0 18:34 ?        00:00:00 nginx: worker process
root       1192   1168  0 18:36 pts/0    00:00:00 grep --color=auto nginx

通过运行/usr/local/sbin目录下的nginx二进制文件启动Nginx服务,查看进程,发现有2个Nginx进程??
Nginx的工作方式:master是主进程文件,不直接响应客户端请求,它负责管理worker子进程的生命周期,子进程具体响应客户端请求。

Nginx启动还提供了多种选项:


Nginx启动选项

2. 关闭和重启Nginx

在Nginx启动后,可以再次执行nginx二进制文件配合-s参数发送信号给master进程,来控制Nginx服务,如

/usr/local/sbin/nginx -s stop

还可以直接发送信号量给Nginx的master进程来加以控制:


master进程控制

通过ps命令,很容易获取到Nginx的进程号。但每次执行命令前都去获取一次实在令人抓狂,有没有办法优化?Nginx其实在启动时将进程ID写入了文件,而文件的位置和读取方式是固定不变的,只是其中存储的进程ID值在每次进程启停后会发生变化。因此只要我们知道怎么读取文件,就能以一种不变的方式获取不断变化的进程ID。这个文件的位置位于:/usr/local/nginx/logs/nginx.pid,其中记录了master主进程的进程ID。

有了进程ID就可以使用"kill -9 进程号"命令杀掉进程,这是我们经常使用的手段。在Nginx的世界里,可以采用"kill TERM $( cat /usr/local/nginx/logs/nginx.pid )"来达到同样的效果。不过这种手法过于暴力,因为如果杀进程时客户正在购物下单,那么服务中断会直接导致业务终止。

Nginx有提供一种优雅的方式干掉进程

kill QUIT $( cat /usr/local/nginx/logs/nginx.pid )

如果用户正在下载,亦或是正在付钱,你通过优雅的杀死这种方式kill nginx进程,那么业务不会戛然而止,因为Nginx进程不会立刻被干掉,它会优先释放不在工作的worker进程,并且等到正在工作的worker进程结束手头的工作再kill掉该worker。

如果系统正常对外提供服务期间,修改了配置文件,并想让其立即生效怎么办?传统的方式是kill进程重启服务,业务短暂中断。Nginx提供了HUP信号量来处理上述场景。HUP命令会让新建的worker优雅的进行新陈代谢,新的worker被创建时,将读取到最新的配置文件。验证一把:

[root@localhost html]# cd /usr/local/nginx/html
[root@localhost html]# cp index.html test.html
[root@localhost html]# vi test.html   # 修改title为你喜欢的样子,保存退出
[root@localhost html]# vi /usr/local/nginx/conf/nginx.conf   # 在server - location - index节点下的index.html前面加上test.html,保存退出
[root@localhost html]# kill -HUP $(cat /usr/local/nginx/nginx.pid)

刷新Nginx访问地址,观察TITLE部分能看到配置已经生效:


Nginx配置文件热加载

日志切割USR1、平滑的升级USR2的使用方式略。

相关文章

  • Nginx 使用 logrotate 进行日志滚动

    Nginx 日志滚动(官方) 向 Nginx 主进程发送 USR1 信号。 USR1 信号量被 Nginx 自定义...

  • Nginx 信号量 [1]

    Nginx信号控制官方链接:https://www.nginx.com/resources/wiki/start/...

  • nginx 信号量

    默认情况下nginx没有被开启 要开启用/sbin/nginx ps -ef | grep -i nginx ne...

  • 第二章 信号量机制及几个经典例题

    1.信号量机制 信号量机制即利用pv操作来对信号量进行处理。 什么是信号量?信号量(semaphore)的数据结构...

  • dispatch_semaphore_t

    一、信号量 semaphore叫做“信号量” 1、创建信号量dispatch_semaphore_create(l...

  • GCD信号量使用

    一、信号量 semaphore叫做“信号量” 1、创建信号量dispatch_semaphore_create(l...

  • dispatch_semaphore_t

    dispatch_semaphore_t :信号量包含三个函数:1、创建信号量 2、增加信号量 3、削减信号量 注...

  • 第二章 信号量(1)

    整形信号量 记录型信号量 这些wait 都是-1 signal都是+1 不同的是 整型信号量wait先判断小于0然...

  • 理解操作系统之信号量的应用

    利用信号量实现进程互斥(模式) 利用信号量实现前驱关系(模式) 利用记录型信号量实现同步(模式) 1.利用信号量实...

  • 2-3进程同步(信号量)

    信号量是什么? 信号量的基本应用 实现多个进程互斥(注意点) (1)互斥信号量mutex初值为1; (2)每个进程...

网友评论

      本文标题:Nginx 信号量 [1]

      本文链接:https://www.haomeiwen.com/subject/pixbtctx.html