Nginx的平滑重启,升级和关闭

原创
2016/07/26 18:11
阅读数 181

        通常情况下,在修改完了nginx.conf配置文件之后,需要重新读取配置文件或者重启web服务器使新的配置生效,我们可以通过给nginx发送系统信号来控制它平滑重启。

一、平滑重启

首先使用linux命令:

ps -ef | grep 'nginx'

查看当前的nginx进程如下:

修改完nginx.conf之后,检查配置文件是否配置正确:

../sbin/nginx -t

注意,我测试的时候是在conf目录,因此这里使用了相对路径写法  ../sbin

当出现上面的文字时,说明配置文件没有问题并且测试通过,此时可以通过向nginx进程发送信号来读取新的配置文件并平滑重启。在终端输入命令 : 

kill -HUP 'nginx master process 的 pid'

便可平滑重启nginx . 其中pid为nginx主进程 master process的pid , pid可通过上面的命令查看,也可以通过nginx.pid文件来获得,如果你在nginx.conf里面指定了nginx.pid的话,该文件会记录nginx运行时的主进程号pid. 因此也可以通过以下命令来平滑重启nginx服务。

kill -HUP `cat nginx.pid文件的路径`

如图:

当nginx接收到HUP信号时,它首先会尝试解析配置文件,如果成功,便应用新的配置文件(例如,重新打开日志文件或监听的套接字),之后,nginx运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字。但是继续为当前连接的客户提供服务。待所有的客户端服务完成后,旧的工作进程也就被关闭了。

二、停止(关闭)

停止nginx服务可以通过向nginx发送以下几个系统信号来实现。

1.kill QUIT Nginx主进程号      #从容停止

2.kill TERM Nginx主进程号      #快速停止
或
 kill INT Nginx 主进程号

3.强制停止所有Nginx进程

pkill -9 nginx
或 
killall nginx

三、平滑升级

当需要将正在运行中的Nginx升级、添加/删除模块时(比如网站需要启用https需要添加http_ssl_module),可以在不中断服务的情况下,使用新版本、重新编译的Nginx可执行程序替换掉原来旧的可执行程序,从而实现平滑升级。

主要有以下几个步骤:

1.将新的编译好后的nginx可执行文件安装到旧版本nginx的安装路径中,替换前最好先坐下旧版本的备份工作。然后发送以下指令:

kill -USR2 旧版本的Nginx主进程号

旧版本的nginx主进程将会重命名它的 .pid 文件为 .oldbin, 然后执行新版本的Nginx可执行程序,依次开启新的主进程和工作进程。

此时,新旧nginx服务会同时运行并且同时负责处理请求,要逐步停止旧的nginx实例,需要发送WINCH信号给旧版本nginx的主进程,然后它的工作进程就将从容关闭。

kill -WINCH 旧的nginx主进程号

一段时间以后,旧的工作进程处理完所有的请求之后便会退出,仅留下新的nginx实例来处理输入的请求了。

 

最后总结下nginx支持的系统信号:

HUP           平滑重启,重新加载配置

TERM,INT  快速关闭

QUIT           从容关闭

USR1         重新打开日志文件,在切割日志时用途较大

USR2         平滑升级可执行程序

WINCH       从容关闭工作进程

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部