1 Nginx的信号控制
在上一节中,我们使用了信号来控制Nginx停止、平滑重启,Nginx支持以下几种信号:
·TERM,n\rr快速关闭;
·;
·QUIT从容关闭;
·HUP平滑重启,重新加载配置文件;
·USRI重新打开日志文件,在切割日志时用途较大:
·USR2平滑升级可执行程序:
·WINCH从容关闭工作进程。
2. Nginx的平滑升级
当需要将正在运行中的Nginx升级、添加,删除服务器模块时,可以在不中断服务的情况下,
使用新版本、重编译的Nginx可执行程序替换旧版本的可执行程序。步骤如下:
(l)使用新的可执行程序替换旧的可执行程序,对于编译安装的Nginx,可以将新版本编译
安装到旧版本的Nginx安装路径中。替换之前,您最好备份一下旧的可执行文件。
(2)发送以下指令:
kill. .-USR2旧版本的 nginx 主进程号
(3)旧版本Nginx的主进程将重命名它的.pid文件为.oldbin(例如:/usr/local/webserver/
nginx/logs/nginx.pid.oldbin),然后执行新版本的Nginx可执行程序,依次启动新的主进程和新的
工作进程。
PID PPID USER %CPU VSZ WCHAN COMMAND
33 126 1root 0.0 1164 pause nginx: master process /usr/locaVnginx/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 prucess (nginx)
36267 36264 nobody 0.0 1364 kqread ngirx: worker process (nginx)
(4)此时,新、1日J坟本的Nginx实例会同时运行,共同处理输入的请求。要逐步停止IHl
的Nginx实例,你必须发送WINCH信号给旧的主进程,然后,它的工作进程就将开始从容舅
kill -WINCHN 旧版本的nginx 主进程号
ki il—wINcH旧版本的Nginx主进程号
(-5) -段时问后,旧的]二作进程(worker process)处理了所有已连接的请求后退出.1
新旧工作进程来处理输入的请求了:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 I root
36264 33126 root
36265 36264 nobody
36266 36264 nobody
36267 36264 nobody
0.0 1164 pause nginx; master process /usr/local/nginx/sbin/ngin)
0.0 1148 pause nginx: master process /usr/local/nginx/sbin/ngin)
0.0 1364 kqread nginx: worker process (nginx)
0.0 1364 kqread nginx: worker process (nginx)
0.0 1364 kqread nginx: worker process (nginx)
(6)这时候,我们可以决定是使用新版本,还是恢复到J日版本:
kill -HUP旧的丰进程号:Nginx将在不重载配置文件的情况下启动它的工作进程:
kill -QUIT新的主进程号:从容关闭其工作进程(workcr proccss);
kill -TERM新的主进程号:强制退出;
kill新的主进程号或旧的主进程号:如果凼为某些原因新的工作进程不能退山,则向其发送
kill信号。
新的主进程退出后,旧的土进程会移除.oldbin前缀,恢复为它的.pid文件,这样,一切
就都恢复到升级之前了。如果尝试升级成功,而你也希望保留新的服务器时,可发送QUIT信
号给旧的主进程,使其退出而只留下新的服务器运行:
PID PPID USER c70CPU VSZ WCHAN COMMAND
36264 lroot 0.0 1148 pause nginx: masrer 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)