nginx常用命令及信号控制

由于工作需要,部署了一个开源的WiKi系统MoinMoin,Web服务器使用了nginx,于是借此机会,梳理了下nignx常用的命令行以及对应的信号控制。
nginx分为masterworker进程,前者是主进程,主要是通过接收请求控制worker进程,后者就是工作进程,实现对请求的处理,一般是一个CPU核绑定一个worker进程。
nginx的启动、停止和重载既能通过命令行实现,也能通过信号进行控制。我理解命令行应该就是信号控制的实现,有空研究下源码应该就很清楚了。虽然信号可以给masterworker进程,但是一般来说是发送给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