Nginx 官方文档翻译 - nginx 控制
2017-10-14 17:12
288 查看
Nginx 官方文档翻译 - nginx 控制
改变配置
可以用信号控制nginx。主进程的ID默认情况下被写入/usr/local/nginx/logs/nginx.pid文件。这个名字可以在配置时修改或者在nginx.conf文件中使用pid指令。主进程支持以下信号:
- TERM, INT - 快速关闭 - QUIT - 友好的关闭 - HUP - 修改配置,保持一个时区的改变(仅FreeBSD&Linux),友好的关闭旧的工作进程,使用新配置创建新的工作进程 - USR1 - 重新打开日志文件 - USR2 - 升级可执行文件(nginx主程序) - WINCH - 友好的关闭所有的工作进程
尽管你不必自己操作工作进程,但是它们也支持一些信号::
- TERM, INT 快速关机 - QUIT 正常关机 - USR1 重新打开日志文件 - WINCH 调试异常终止(要求debug_points 可用)
修改配置文件
为了让nginx重读配置文件,一个HUP信号应该被发送到主进程。主进程首先检查语法的有效性,然后试图应用新的配置,即打开日志文件和新的监听套接字。如果失败,它会回滚变化的地方,并继续使用旧的配置。如果成功了,它会开启新的工作进程,并向旧的进程发送正常关机的消息。旧的工作进程关闭监听的套接字并继续服务旧的客户端。当服务完所有的客户端,旧的工作进程会关闭。让我们通过示例来说明。假设nginx是运行在FreeBSD 4.x 上的,这个命令是:
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'
输出如下:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 33127 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) 33128 33126 nobody 0.0 1364 kqread nginx: worker process (nginx) 33129 33126 nobody 0.0 1364 kqread nginx: worker process (nginx)
当”HUP“signal发送给nginx主进程,输出如下:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33129 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx) 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
上面可以发现,33129的工作进程,仍然在继续工作。一段时间后,输出如下:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
此时,所有的旧的工作进程,都已经全部关闭。
日志文件轮询
为了轮询日志文件,这些日志文件首先应该被重命名(轮询的日志文件命名有一定的规律)。接着,发送”USR1“signal给主进程。主进程将重新打开所有当前打开的日志文件,并且分配给它们一个没有特权的用户作为owner用户(工程进行的运行用户,例如上节中的nobody)。重新打开成功后,主进程关闭所有打开的文件,并发送消息给工作进程,要求它们去重新打开日志文件。工作进程打开新文件,并马上关闭旧文件。结果,旧文件几乎立马可用于后处理,例如:压缩。在线升级可执行文件
为了升级服务器,新的可执行文件应该首先被写入到旧文件中。接着,发送”USR2“signal给主进程。主进程首先重命名 ”存储进程ID的文件“(/usr/local/nginx/logs/nginx.pid)为一个新文件,后缀是”.oldbin“(/usr/local/nginx/logs/nginx.pid.oldbin),接着,启动一个新的可执行文件,反过来,再启动新的工作进程:PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
之后,所有的工作进程(新的&旧的)继续接收请求。如果 ”WINCH“ signal发送给第一个主进程,它将发送消息给它的子工作进程,请求它们友好的关闭,然后子工作进程开始关闭:
一段时间后,只有新的工作进程来处理请求:
注意:旧的主进程并没有关闭它监听的sockets,当需要时,它仍然能够开启它的子工作进程。如果,由于某些原因,新的可执行文件工作不正常,可执行下面的一个:
发送”HUP“signal给旧的主进程。旧的主进程,不用重新读取配置,并开启新的工作进程。之后,发送”QUIT“signal给新的主进程,新的进程将被友好的关闭。
发送”TERM“signal给新的主进程。将发送消息给它的工作进程,要求它们迅速退出,新的工作进程迅速退出(如果因为某些原因,新的进程并未退出,应该发送”KILL“signal,强制它们退出)。当新的主进程退出,旧的主进程将自动的开启新的工作进程。
如果新的主进程退出,然后旧的主进程忽略 ”.oldbin“ 后缀文件。
如果升级成功,之后应该发送”QUIT“signal给旧的主进程,最后,只有新的进程会被保留下来:
PID PPID USER %CPU VSZ WCHAN COMMAND 36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
相关文章推荐
- Oracle 12c 12.1.0.1.0管理控制文件官方文档翻译说明
- 0.Nginx官方文档翻译-目录
- Nginx 官方文档翻译 - nginx的配置文件管理
- nginx的rewrite模块官方英文文档的节选翻译
- Nginx 官方文档翻译 - 新手指南
- Nginx 官方文档翻译 - 连接处理方法
- Saving Files保存文件 官方文档翻译
- moko模板官方文档 中文翻译
- 【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
- android官方技术文档翻译——工具属性
- 【Symfony2官方文档翻译】Book11:安全
- Ext JS 4 架构你的应用 第2节 (官方文档翻译)
- Extjs4 官方文档翻译系列二:组件(components)、自定义组件
- django 1.8 官方文档翻译:2-1-1 模型语法
- android官方技术文档翻译——switch 语句转换
- 下载Android源码(Google官方文档翻译)
- Quartz官方文档翻译
- RPi.GPIO 官方使用文档翻译
- Ubuntu搭建Hadoop --伪分布式模式 ----官方文档翻译
- Sencha Touch 2 官方文档翻译之 Controllers(控制器学习指南)