由于工作需要,部署了一个开源的WiKi系统MoinMoin,Web服务器使用了nginx
,于是借此机会,梳理了下nignx
常用的命令行以及对应的信号控制。
nginx
分为master
和worker
进程,前者是主进程,主要是通过接收请求控制worker
进程,后者就是工作进程,实现对请求的处理,一般是一个CPU核绑定一个worker
进程。
nginx
的启动、停止和重载既能通过命令行实现,也能通过信号进行控制。我理解命令行应该就是信号控制的实现,有空研究下源码应该就很清楚了。虽然信号可以给master
和worker
进程,但是一般来说是发送给master
进程,由它来控制worker
进程。下面的表格就是命令行和信号的对应关系,其中PID均为master
PID。
nginx命令行 |
信号 |
作用 |
nginx -s reload |
kill -HUP PID |
重载服务 |
nginx -s reopen |
kill -USR1 PID |
日志切割 |
nginx -s stop |
kill -TERM PID |
停止服务 |
nginx -s quit |
kill -QUIT PID |
优雅停止服务 |
重载服务,生效新的配置文件但不会影响系统正常访问;优雅停止服务,指完成了请求响应后关闭服务。
nginx
提供的命令行基本能满足日常的运维需求,但是不能实现热升级,这时候就只能使用信号控制了,需要使用两条命令行语句。
#备份旧版本nginx文件
cp nginx nginx.old
#新版本nginx文件替换旧版本
cp -f nginx /usr/local/nginx/sbin/
#启动新master进程,新旧并存,ps:有分享说,旧master进程修改pid文件名,加后缀.oldbin,但我实际的操作是两个进程名都是nginx
kill -USR2 operation_master_PID
#通过给旧master进程发送信号,优雅退出其worker进程
kill -WINCH old_master_PID
建议不要热升级完成就用-QUIT
关闭老的master
进程,因为还得考虑回退到旧版本的情况,此时需要对旧master
进程发送-HUP
信号。
#还原旧版本nginx
cp -f nginx.old nginx
#回退到旧master进程
kill -HUP old_master_PID