linux怎么关闭nginx服务?几种停止方式详解

来源:IT编程作者:乙爱丽丝头衔:网络博主
导读:本期聚焦于小伙伴创作的《linux怎么关闭nginx服务?几种停止方式详解》,敬请观看详情。凌晨上线后想停掉nginx却怕误杀进程?nginx在linux下提供了多种关闭机制,分别对应不同的平滑程度。最稳妥的是发送QUIT信号让主进程处理完存量连接再退出,对应命令是nginx -s quit。若需立即终止,可使用TERM或INT信号,但会断开正在通信的客户端。系统层面通过systemctl或service封装了这些信号,适合用守护进程管理的场景。直接kill主进程pid的方式不够直观,容易漏掉子进程。下文从信号原理、命令行工具、服务管理器三个角度对比各方案差异,并给出避免端口占用的实操步骤。

在linux环境中运行nginx时,根据不同的业务场景,我们需要用不同的方式将其关闭。有些场景要求不影响已有连接,有些则希望立刻释放端口。理解nginx的进程模型与信号机制,才能选对停止命令。

linux怎么关闭nginx服务?几种停止方式详解

一、nginx进程与信号基础

nginx启动后默认采用多进程模型:一个master主进程负责管理配置与worker子进程,若干worker进程处理实际请求。master进程会监听特定信号,根据信号类型决定如何关闭服务。这种机制让我们不必暴力杀进程,也能安全停下服务。

常用的关闭相关信号包括QUIT、TERM和INT。QUIT代表优雅退出,master会通知worker先处理完当前连接再退出;TERM和INT则是快速终止,worker立刻停止接收新连接并退出,正在传输的请求会被中断。掌握信号差异,是选对关闭方式的前提。

1.1 查看nginx进程

在发送信号前,我们通常先确认nginx是否在运行以及主进程pid。可以使用ps命令配合grep过滤,也可以通过nginx自带的pid文件读取。

多数情况下,nginx安装时会在配置中指定pid文件路径,例如/var/run/nginx.pid。该文件内容就是master进程的pid,直接读取即可避免人工筛选错误。

# 查看nginx相关进程
ps -ef | grep nginx

# 读取pid文件获取主进程号
cat /var/run/nginx.pid

二、使用nginx自带命令关闭

nginx二进制自身提供了-s参数,用于向运行中的master进程发送控制指令。这种方式最直观,不需要手动查pid,也不会误杀其他进程。

其中stop表示快速停止,内部等价于发送TERM信号;quit表示优雅停止,内部发送QUIT信号。如果nginx命令不在环境变量中,需要写全路径,例如/usr/sbin/nginx -s quit。

2.1 优雅关闭示例

以下命令会让nginx处理完已有请求后再退出,适合业务低峰期发布使用。执行后可以用ps命令确认进程是否已消失。

# 优雅停止,不中断已有连接
nginx -s quit

# 若提示权限不足,使用sudo
sudo nginx -s quit

2.2 快速关闭示例

当nginx卡死或配置错误无法优雅退出时,可以使用stop快速终止。注意这会让正在访问的用户断开连接。

# 快速停止
nginx -s stop

三、利用系统服务管理器关闭

在主流linux发行版中,nginx通常注册为systemd或sysvinit服务。通过服务管理器关闭,不仅能停止进程,还会同步更新服务状态,避免开机自动拉起冲突。

使用systemctl时,stop对应快速终止,而部分包提供了nginx -s quit的封装命令。若系统使用service脚本,写法与systemctl类似,只是后端调用不同。

3.1 systemctl方式

以下命令适用于ubuntu 16.04+、centos 7+等使用systemd的系统。stop后可用status确认是否退出。

# 使用systemctl停止
sudo systemctl stop nginx

# 查看状态
systemctl status nginx

3.2 service方式

较老发行版可用service命令,其本质调用init.d脚本,内部依旧是向master发信号。

# 使用service停止
sudo service nginx stop

四、直接用kill发送信号

如果上述工具都不可用,我们可以手动用kill命令向master进程发送信号。需要注意必须杀master的pid,而不是worker,否则master会重新拉起worker。

QUIT信号编号为3,TERM为15。发送后稍等几秒,再用ps确认。若进程仍在,可追加KILL信号(9)强制退出,但强制退出可能导致pid文件残留。

# 获取主进程pid
PID=$(cat /var/run/nginx.pid)

# 优雅关闭
kill -QUIT $PID

# 若无效,快速终止
kill -TERM $PID

五、关闭后的检查与避坑

不论用哪种方式,关闭后都应确认端口是否已释放。nginx默认监听80或443,若进程退出了但端口仍被占用,往往是子进程残留或时间_wait状态。

可以用ss或netstat查看监听情况。如果发现nginx进程已经不在但端口未空,可检查是否有其他程序占用了配置中的端口,或者等待内核回收。此外,若使用pid文件管理,停止后最好删除过期pid文件,防止下次启动报错。

# 查看80端口占用
ss -lntp | grep ':80'

# 清理残留pid文件(确认进程已死后再做)
sudo rm -f /var/run/nginx.pid
关闭方式命令示例连接影响适用场景
优雅停止nginx -s quit已有连接处理完再断低峰发布、配置更新
快速停止nginx -s stop立即断开紧急停服、卡死
系统服务systemctl stop nginx取决于封装受管服务环境
kill信号kill -QUIT pid可控工具缺失时

综合来看,日常运维优先使用nginx -s quit或服务管理器停止,既安全又不易出错。只有在异常状态下才考虑kill强制终止,并在操作后做好端口与pid文件检查。

linuxnginxstop_service修改时间:2026-08-07 16:27:18

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。