nginx 通过信号来控制。对应linux系统就是用kill
命令。
The command kill sends the specified signal to the specified process or process group. If no signal is specified, the TERM signal is sent.
master进程id在默认写入到/nginx/logs/nginx.pid
文件中。文件也可以在nginx.conf
文件中指定。master进程支持以下信号:
kill -TERM `cat ./logs/nginx.pid` #快速停止master进程。
kill -QUIT `cat ./logs/nginx.pid` #优雅的停止。
kill -HUB `cat ./logs/nginx.pid` #改变配置文件。开启一个新的worker进程处理,优雅的停止老的worker 进程。相当于nginx -s reload
kill -USR1 `cat ./logs/nginx.pid` #重新打开log文件。-s reopen命令
kill -USR2 `cat ./logs/nginx.pid` #升级可执行文件。热部署
kill -WINCH `cat ./logs/nginx.pid` #优雅的关闭worker进程。
每个worker进程也可以接收信号:
kill -TERM xxx #快速关闭worker进程
kill -QUIT xxx #优雅退出
kill -USR1 xxx #重新打开日志文件,先mv一个,再去执行这个命令。-s reopen命令
备份一下原先的nginx文件。
把新的nginx二进制文件放到原先相同目录下。
给master进程发送USR2信号。
master进程会把logs/nginx.pid
文件复制一份为logs/nginx.pid.oldbin
,然后运行新的nginx文件,生成新的worker进程。
新老master和worker共存。(如果没有成功可以看logs/error.log
是否有日志)
给老master进程发送WINCH
信号,老master就会发送信号让他对应的worker进程优雅的退出。QUIT信号。
然后就剩新的master和worker进程,以及老的master进程。
注意:老的master进程不会退出。可以用于必要时候的回滚操作。有两种情况。
nginx.conf
的方式启动新的worker进程。然后再给新的master进程发送QUIT信号让他优雅的退出。如果回滚,那么第四步的nginx.pid.oldbin
文件会被丢弃。
如果升级成功,就给老的master进程发送QUIT
信号,让其优雅的退出。
原文:https://www.cnblogs.com/sheldon-lou/p/12355173.html