Nginx Master进程本身不主动监控,而是通过waitpid()和SIGCHLD感知Worker退出并重启;其真实存活与行为响应(如补位Worker、处理信号、执行reload)是外部监控的核心依据,需结合进程检查、HTTP探活及systemd看门狗等手段实现闭环。
Nginx 的 Master Process 本身不主动执行监控任务,它不是监控程序,而是通过其固有的进程管理机制,为外部监控提供可靠基础和响应支点。
真正有效的“主进程监控”,是把 Master 的行为特征作为判断依据,并配合外部手段形成闭环。
Master 进程异常退出,Worker 就失去调度中枢——即使残留的 Worker 还在跑,也无法接受新连接、无法 reload、不能平滑升级。所以监控首要目标是确认它是否真实运行:
pgrep -f "nginx: master process" 检查进程是否存在(返回 0 才算正常) nginx 或 worker,否则可能误判(比如 Master 已死,Worker 还在处理旧请求) systemctl is-active nginx 可辅助判断,但需注意它只反映 systemd 单元状态,不等于进程真实存活 Master 不探测、不打点,但它对事件的响应就是最直接的健康指标:
worker_processes 4,却只看到 2 个 worker),说明 Master 未成功拉起或权限/资源受限 nginx -s reload 后,新 Master 和新 Worker 应陆续出现 → 若 ps aux | grep nginx 中只有旧 Worker、无新 Master,说明 reload 失败,可能是配置错误或端口被占 SIGQUIT 或 SIGTERM 后应优雅退出 → 若 kill 后进程仍在,可能是卡死或信号被屏蔽 Master 存活 ≠ 服务可用。常见“假活”场景包括:
/healthz)会失败 lsof -p $(pgrep nginx | head -1) | wc -l 超过 ulimit 限制,新连接被拒绝 connect() failed (111: Connection refused) → 实际是后端不可达,需联动上游监控 systemd 是最稳妥的落地方式,关键是让重启逻辑尊重 Master 的角色:
Type=simple(daemon off)或 Type=forking(daemon on)必须与实际启动方式一致,否则 systemd 无法准确识别主进程 Restart=always + RestartSec=5 + StartLimitBurst=3 组合,防雪崩重启 ExecStartPre=/usr/sbin/nginx -t 强制前置校验,避免因配置错误导致 Master 启动即退出 不复杂但容易忽略:Master 的价值不在“它做了什么”,而在“它没出问题时,整个系统才能按预期运转”。监控它的本质,是守住这个前提。