能够经过信号控制 nginx,主进程 pid 默认写入 /usr/local/nginx/logs/nginx.pid 文件。名称可能在配置时候,或是经过 nginx.conf 中 pid 指令修改。主进程支持如下信号指令:nginx
尽管不是必须的,独立的工做进程也能够经过信号来控制。支持的信号指令以下:shell
为了让 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 信号给第一个主进程,它会发送消息给对应工做进程,让它们从容关闭,而后工做进程开始退出:
一段时间以后,只留新工做进程继续处理请求:
以上会发现旧的主进程并无关闭其监听端口,若是须要,仍然能够再次启动其工做进程。如果由于某些缘由新的可执行文件执行失败,如下内容其中一条会被执行:
若是新主进程退出,原主进程依据 进程ID 删除后缀 .oldbin。
若是成功更新,而后发送 QUIT 信号给原主进程,只留新进程: