浏览 450
nginx可以通过信号进行控制。主进程的进程ID默认情况下被写入文件/usr/local/nginx/logs/nginx.pid。此名称可以在配置时更改,或在nginx.conf中使用pid指令进行更改。主进程支持以下信号:
TERM、INT 快速关闭
QUIT 优雅关闭
HUP 更改配置、跟踪更改的时区(仅适用于FreeBSD和Linux)、使用新配置启动新的工作进程、优雅关闭旧的工作进程
USR1 重新打开日志文件
USR2 升级可执行文件
WINCH 优雅关闭工作进程
个别工作进程也可以使用信号进行控制,但这不是必需的。支持的信号包括:
TERM、INT 快速关闭
QUIT 优雅关闭
USR1 重新打开日志文件
WINCH 异常终止以进行调试(需要启用debug_points)
更改配置
为了使nginx重新读取配置文件,应向主进程发送HUP信号。主进程首先检查语法的有效性,然后尝试应用新配置,即打开日志文件和新的监听套接字。如果失败,它将回滚更改并继续使用旧的配置。如果成功,它将启动新的工作进程,并向旧的工作进程发送消息,要求它们优雅地关闭。旧的工作进程关闭监听套接字并继续服务旧的客户端。在所有客户端服务完毕后,旧的工作进程被关闭。
让我们以一个例子来说明。假设nginx在FreeBSD上运行,运行以下命令:
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信号,则输出变为:
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)
仍然有一个旧的工作进程(PID
为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信号。主进程将重新打开当前打开的所有日志文件,并将它们分配给工作进程正在运行的非特权用户作为所有者。成功重新打开后,主进程关闭所有打开的文件,并发送消息给工作进程,要求它们重新打开文件。工作进程也会立即打开新文件并关闭旧文件。结果是,旧文件几乎立即可以用于后续处理,如压缩。
动态升级可执行文件
为了升级服务器可执行文件,首先需要将新的可执行文件放在旧文件的位置。然后向主进程发送USR2信号。主进程首先将其带有进程ID的文件重命名为带有.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信号,它将向其工作进程发送消息,请求它们优雅地关闭,它们将开始退出:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody 0.0 1380 kqread nginx:
worker process is shutting down (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)
过一段时间后,只有新的工作进程将处理请求:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/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)
值得注意的是,旧的主进程不关闭其监听套接字,如果需要,可以管理它来重新启动其工作进程。如果由于某种原因新的可执行文件工作不正常,可以执行以下操作之一:
向旧的主进程发送HUP信号。旧的主进程将在不重新读取配置的情况下启动新的工作进程。然后,可以向新的主进程发送QUIT信号以使所有新的进程优雅地关闭。
向新的主进程发送TERM信号。然后,它将向其工作进程发送消息,要求它们立即退出,它们将立即全部退出。(如果新进程由于某种原因未退出,则应向其发送KILL信号以强制它们退出。)当新的主进程退出时,旧的主进程将自动启动新的工作进程。
如果升级成功,则应向旧的主进程发送QUIT信号,只有新的进程将保留:
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)
工藤新一(柯南・江户川柯南):本作主角,是一名高中生侦探。在一次偶然事件中,被组织称为“黑衣组织”所灌下神秘药物“APTX4869”,使他的身体缩小成小学生的样子。为了隐藏身份并继续调查黑衣组织,他化名为江户川柯南,寄住在侦探园田平次家中。
按点赞数排序
按时间排序