二进制安装nginx后,进程控制完全依赖向master进程发送unix信号;需先通过pid文件(如/usr/local/nginx/logs/nginx.pid)或ps命令精准获取master pid,再用nginx -s或kill发送hup、quit、usr1等信号实现重载、停止、日志轮转等操作。

二进制安装 Nginx 后,进程控制完全依赖信号机制,核心是向 master 进程 发送特定 Unix 信号。整个流程不依赖 systemd 或 init 系统,轻量、可靠、可预测。
确认 master 进程 PID
信号必须发给 master 进程,不是任意 worker。获取方式有两种:
- 读取 pid 文件:默认路径为 /usr/local/nginx/logs/nginx.pid(若安装路径不同,请按实际调整),执行
cat /path/to/nginx.pid即可获得 PID - 查进程列表:运行
ps -ef | grep nginx,找到nginx: master process那一行的第二列数字,即为 master PID
常用信号及其作用
所有操作本质都是向 master PID 发信号,worker 进程不直接响应外部信号,由 master 统一协调:
- HUP:重载配置。master 校验新配置语法,成功后启动新 worker,再通知旧 worker 优雅退出(继续处理存量请求)
- QUIT:优雅停止。master 关闭监听套接字,并通知所有 worker 进入退出状态;worker 完成当前请求后才终止
- TERM 或 INT:快速终止。master 立即向 worker 发送 TERM,worker 中断服务并退出,不等待未完成请求
-
USR1:重新打开日志文件。常用于 logrotate 场景——先重命名日志(如
mv access.log access.log.1),再发此信号,worker 会以新文件名重建日志句柄 - USR2 + WINCH:平滑升级二进制。先发 USR2 启动新版本 master+worker;再发 WINCH 让旧 worker 逐步退出,实现零中断升级
发送信号的两种标准方式
推荐使用封装命令,更安全、易记:
-
nginx -s reload→ 等价于kill -HUP $(cat /path/to/nginx.pid) -
nginx -s quit→ 等价于kill -QUIT $(cat /path/to/nginx.pid) -
nginx -s stop→ 等价于kill -TERM $(cat /path/to/nginx.pid) -
nginx -s reopen→ 等价于kill -USR1 $(cat /path/to/nginx.pid)
手动用 kill 命令也完全可行,但务必避免 kill -9(SIGKILL),它绕过 Nginx 的优雅逻辑,可能导致连接中断或日志丢失。
注意事项与验证
操作后建议立即验证效果:
- 重载配置后,检查
ps -ef | grep nginx是否出现新 worker、旧 worker 标注shutting down - 发 QUIT 后,观察 worker 进程是否逐个消失,master 是否最后退出
- USR1 后,确认新日志文件是否被写入(注意权限:worker 以 nobody 或指定用户身份打开文件)
- 所有信号都只对 master 有效;向 worker 进程发信号虽能触发其局部行为(如 QUIT),但不属于标准运维路径,不推荐











