有 nginx 的 kill 信号机制,关键信号:
1、先发送 USR2 信号,例如:
此时用 ps -ef | grep nginx 可以看到多了一倍的 nginx 的相关进程。同时 logs 目录下多了一个 nginx.pid.oldbin 文件,记录的是旧的 nginx 主进程的 pid。
2、用 WINCH 信号关闭旧的工作进程
此时,旧的 nginx 主进程还没关闭的,只是旧的 nginx 工作进程关了。
如果正常可以执行第3步。
3、用 QUIT 信号关闭旧的 nginx 主进程
这样算升级了,新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,可以恢复到升级前的状态。
当然在第2部时可能发现不对,可以补救,仍可以恢复旧的服务器:
1,发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程。
2,发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程。
3,发送 TERM 信号给新的主进程,迫使其退出。
4,如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号。