使用nginx
命令的-s
信号参数(推荐)
这是最常用和推荐的方法,因为它会让 Nginx 优雅地停止。
1. 优雅停止
这种方式会让 Nginx 完成当前正在处理的请求后再停止,是生产环境的首选。
sudo nginx -s quit
2. 快速停止
这种方式会立即停止 Nginx,可能会中断正在处理的请求。
sudo nginx -s stop
说明:
quit
:优雅停止,等待工作进程处理完当前的请求。
stop
:快速停止。
方法二:使用systemctl
命令(如果系统使用 Systemd)
绝大多数现代的 Linux 发行版(如 CentOS 7/8, Ubuntu 16.04+, Debian 8+)都使用systemd
来管理服务。
1. 停止 Nginx 服务
sudo systemctl stop nginx
2. 其他相关命令
启动 Nginx:sudo systemctl start nginx
重启 Nginx:sudo systemctl restart nginx
重新加载配置(不中断服务):sudo systemctl reload nginx
查看 Nginx 状态:sudo systemctl status nginx
方法三:使用kill
命令(传统方法)
如果上述命令都不可用,你可以直接向 Nginx 主进程发送信号。
步骤:
1、查找 Nginx 主进程的 PID(进程ID)
ps -ef | grep nginx
输出结果中,master process
的就是主进程,它的 PID 通常在第一列。
root 1234 1 0 Jul10 ? 00:00:00 nginx: master process /usr/sbin/nginx nginx 5678 1234 0 Jul10 ? 00:00:00 nginx: worker process
在这个例子中,主进程 PID 是1234
。
2、向主进程发送信号
优雅停止(等同于nginx -s quit
):
sudo kill -QUIT 1234 # 或者使用信号代号 # sudo kill -3 1234
快速停止(等同于nginx -s stop
):
sudo kill -TERM 1234 # 或者 # sudo kill -15 1234
强制停止(不推荐,万不得已时使用):
sudo kill -9 1234
警告:kill -9
是强制杀死信号,进程无法捕获也无法做出任何清理工作,可能会导致数据丢失或配置文件损坏,请尽量避免使用。
方法 | 命令 | 适用场景 |
推荐方法 | sudo nginx -s quit | 优雅停止,适合所有环境 |
系统服务 | sudo systemctl stop nginx | 优雅停止,Systemd 系统首选 |
信号控制 | sudo kill -QUIT | 当nginx 命令不可用时 |
停止后,你可以使用以下命令来确认 Nginx 是否已关闭:
方法1:检查进程 ps -ef | grep nginx 方法2:检查端口(Nginx 默认监听80和443端口) sudo netstat -tulpn | grep :80 或者使用 ss 命令 sudo ss -tulpn | grep :80 方法3:如果使用 systemd,检查状态 sudo systemctl status nginx
如果这些命令没有返回关于 Nginx 的监听信息或进程信息,说明它已经成功停止了。
Q: 执行nginx -s quit
时提示nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
?
A: 这通常意味着 Nginx 并未在运行,或者 pid 文件被误删了,你可以用ps -ef | grep nginx
检查进程是否存在,如果存在,请使用方法三(kill
命令)来停止它。
Q: 停止后如何启动?
A: 根据你停止的方式,使用对应的启动命令:
sudo nginx
sudo systemctl start nginx
文章摘自:https://idc.huochengrm.cn/fwq/17282.html
评论