nginx不停服务升级是通过信号控制完成的。
nginx信号控制使用的几个选项
信号 | 含义 |
TERM、INT | 快速关闭进程 |
QUIT | 优雅的关闭进程,即等请求结束之后再关闭 |
HUP | 改变配置文件之后、平滑的重读配置文件 |
USR1 | 切割日志 |
USR2 | Nginx平滑的升级 |
WINCH | 优雅的关闭旧进程,配合USR2进行升级 |
如何通过信号控制nginx,命令格式如下:
kill -[ TERM | INT | QUIT | HUP | USR1 | USR2 | WINCH ] pid(nginx进程编号)
pid可以通过sudo cat `sudo find / -name nginx.pid`或者sudo ps -ef|grep nginx|grep master查看
nginx的信号控制是通过kill来实现的。其实kill就有相应的信号,通过 kill -l 可以查看所有信号:
其中SIGUSR1,SIGUSR2属用户自定义信号,不同应用可以将其用于不同的功能,如nginx的SIGUSR1和SIGUSR2分别代表切割日志与平滑升级。
在kill命令中可以使用信号名(或者去掉SIG前缀的简写)也可以使用信号的编号,如 kill -9 pid 或者 kill -KILL pid 或者 kill -SIGKILL pid
这么多的信号,常用的不多,记住下面几个就可以了:
信号编号 | 信号名 | 简写 | 含义 |
---|---|---|---|
0 | SIGEXIT | EXIT | 程序退出时收到该信息。 |
1 | SIGHUP | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
2 | SIGINT | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。 |
3 | SIGQUIT | QUIT | 退出。 |
9 | SIGKILL | KILL | 杀死进程,即强制结束进程。(最常用,简单粗暴,进程异常终止) |
11 | SIGSEGV | SEGV | 段错误。 |
15 | SIGTERM | TERM | 正常结束进程,是 kill 命令的默认信号。 |
kill信号简单概括一下:编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。