Nginx API 学习之二:控制nginx

控制nginx

Controlling nginxhtml

能够经过信号控制 nginx,主进程 pid 默认写入 /usr/local/nginx/logs/nginx.pid 文件。名称可能在配置时候,或是经过 nginx.confpid 指令修改。主进程支持如下信号指令:nginx

  • TERM, INT 快速关闭
  • QUIT 从容关闭
  • HUP 修改配置文件,跟上时区的变化(仅适用于FreeBSD和Linux系统),针对修改后的配置文件建立一个新的工做进程,从容关闭原工做进程
  • USR1 从新打开日志文件
  • USR2 更新可执行文件
  • WINCH 从容关闭工做进程

尽管不是必须的,独立的工做进程也能够经过信号来控制。支持的信号指令以下:shell

  • TERM, INT 快速关闭
  • QUIT 从容关闭
  • USR1 从新打开日志文件
  • WINCH 调试时非正常停止(须要启用debug_points

修改配置文件

为了让 nginx 重读配置文件,须要向主进程发送 HUP 信号,主进程首先检查配置文件语法有效性,而后尝试应用新配置,即打开日志文件和新的监听端口。若是失败,回滚修改继续使用旧的配置,若是成功,建立新的工做进程,发送信号到旧的工做进程,从容关闭它们,旧的进程关闭监听端口,继续服务旧客户端,服务完成,关闭旧的工做进程。服务器

经过例子描绘如下这个过程。假设 nginx 运行在 FreeBSD,执行下面命令:并发

ps -axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'

输出以下所示:debug

发送 HUP 信号到主进程,输出结果为:调试

PID 为 33129 的原工做进程仍然继续工做,一段时间后再退出:日志

轮转日志文件

为了轮转日志文件,首先须要重命名文件,而后给主进程发送 USR1 信号,以后主进程将重启全部正打开的日志文件,给这些文件分配无权限的用户做为全部者,工做进程运行在这些用户下。在重启成功后,主进程关闭全部打开的日志文件,并发送消息给工做进程重启文件,工做进程当即打开新的日志文件,关闭旧的文件。所以,旧文件几乎立刻进行后续处理,例如压缩处理。code

动态更新可执行文件

为了更新服务器可执行文件,须要把新文件放在旧文件位置,发送 USR2 信号到主进程,主进程先依据 进程ID 重命名原文件,加上后缀为 .oldbin,例如 /usr/local/nginx/logs/nginx.pid.oldbin,而后启动新文件,依次启动新的工做进程。htm

以后,全部工做进程(新的和旧的)继续接收请求,若是发送 WINCH 信号给第一个主进程,它会发送消息给对应工做进程,让它们从容关闭,而后工做进程开始退出:

一段时间以后,只留新工做进程继续处理请求:

以上会发现旧的主进程并无关闭其监听端口,若是须要,仍然能够再次启动其工做进程。如果由于某些缘由新的可执行文件执行失败,如下内容其中一条会被执行:

  • 发送 HUP 信号到原主进程,主进程将在不重读配置文件的状况下启动新的工做进程,而后发送 QUIT 信号给新的主进程来从容关闭全部新进程。
  • 发送 TERM 信号给新主进程,主进程发送消息给其工做进程让它们当即退出,工做进程几乎即刻退出(如果由于某些缘由新进程未退出,应该发送 KILL 信号强制退出),当新主进程退出时,原主进程将自动启动新工做进程。

若是新主进程退出,原主进程依据 进程ID 删除后缀 .oldbin

若是成功更新,而后发送 QUIT 信号给原主进程,只留新进程:

相关文章
相关标签/搜索