当你使用如下命令手动启动 Nginx:
nginx -c /etc/nginx.conf
这意味着你没有通过系统服务(如 service nginx start)启动,而是直接调用 nginx 二进制文件并指定配置文件。此时,停止服务不能简单地用 service nginx stop(因为系统服务可能根本没启动),而应通过 Nginx 的进程控制机制来优雅停止。
✅ 正确停止方式:使用 nginx -s stop 或 quit
但注意:必须指定相同的配置文件路径(如果配置中指定了 pid 文件位置)或者确保能读取到正确的 PID。
方法一:使用 nginx -s quit(推荐,优雅退出)
nginx -c /etc/nginx.conf -s quit
-s quit:发送 QUIT 信号,Nginx 会等当前请求处理完再关闭(优雅停止)。
方法二:强制停止
nginx -c /etc/nginx.conf -s stop
-s stop:立即终止(类似kill -TERM),不等待请求完成。
⚠️ 前提条件:Nginx 必须在配置中定义了 pid 路径
在 /etc/nginx.conf 中,通常会有这样一行:
pid /var/run/nginx.pid;
Nginx 启动时会把主进程 PID 写入该文件,-s 信号命令依赖这个文件来找到主进程。
✅ 如果你的 /etc/nginx.conf 没有 pid 指令,建议加上,例如:
user nginx;
worker_processes 1;
pid /var/run/nginx.pid; # ← 确保有这行
...
然后重启 Nginx 生效。
🔍 如果不知道 PID 或 nginx -s 失败,可手动 kill
查找 Nginx 主进程 PID:
ps aux | grep nginx输出示例:
root 1234 0.0 0.1 123456 1234 ? Ss 10:00 0:00 nginx: master process nginx -c /etc/nginx.conf nginx 1235 0.0 0.2 123456 2345 ? S 10:00 0:00 nginx: worker process主进程是
master process,PID 是1234。优雅停止(推荐):
sudo kill -QUIT 1234强制停止:
sudo kill -TERM 1234 # 或 sudo kill -9 1234 # 仅在无响应时使用
📝 总结
| 场景 | 命令 |
|---|---|
正常启动(带-c)且配置含 pid |
nginx -c /etc/nginx.conf -s quit |
配置无pid 或 -s 失败 |
手动ps + kill -QUIT <PID> |
| 强制终止 | kill -9 <master_PID> |
💡 建议:始终在
nginx.conf中显式设置pid路径,便于管理。