在Linux系统中停止php-fpm是日常服务器维护中常见的操作,php-fpm(FastCGI Process Manager)作为PHP的FastCGI进程管理器,负责处理PHP请求的执行和响应,停止php-fpm通常有几种方法,具体操作取决于系统的初始化系统(如systemd或SysV init)以及php-fpm的安装方式(源码安装或包管理器安装),以下是详细的停止方法和注意事项。
使用systemctl命令(推荐,适用于systemd系统)
当前主流Linux发行版(如CentOS 7+、Ubuntu 16.04+)多采用systemd作为初始化系统,php-fpm通常被配置为systemd服务,停止步骤如下:
-
确认php-fpm服务名:
不同PHP版本的php-fpm服务名可能不同,可通过以下命令查看:systemctl list-units --type=service | grep php
常见服务名如
php-fpm
、php7.4-fpm
、php8.0-fpm
等。 -
停止php-fpm服务:
使用systemctl stop
命令加上服务名,systemctl stop php-fpm
若服务名为
php7.4-fpm
,则命令为:systemctl stop php7.4-fpm
-
确认停止状态:
执行以下命令检查php-fpm是否已停止:systemctl status php-fpm
若输出中显示“Active: inactive (dead)”,则表示停止成功。
使用service命令(适用于SysV init系统)
对于较老的Linux发行版(如CentOS 6、Ubuntu 14.04),采用SysV init系统,php-fpm可能通过service
命令管理,停止步骤:
-
确认服务是否存在:
service --status-all | grep php
若输出包含php-fpm相关服务,则可继续操作。
-
停止服务:
service php-fpm stop
部分系统可能需要指定版本,如
service php7.4-fpm stop
。 -
验证状态:
service php-fpm status
若提示“php-fpm is stopped”或无相关进程,则停止成功。
通过kill命令发送信号(适用于所有系统)
若无法通过服务管理工具停止,或需要精细控制进程,可通过kill
命令向php-fpm主进程发送终止信号,步骤:
-
查找php-fpm主进程ID(PID):
ps aux | grep "php-fpm: master process" | grep -v grep | awk '{print $2}'
输出的数字即为php-fpm主进程的PID(例如
1234
)。 -
发送终止信号:
- 优雅停止(推荐):发送
TERM
信号,允许php-fpm完成当前请求后退出:kill -TERM 1234
- 强制停止:若需立即终止所有进程(可能导致未完成请求丢失),发送
KILL
信号:kill -KILL 1234
- 优雅停止(推荐):发送
-
确认进程是否终止:
ps aux | grep php-fpm | grep -v grep
若无相关进程输出,则表示停止成功。
使用php-fpm自带管理脚本(源码安装适用)
若php-fpm通过源码安装,且编译时启用了--enable-fpm
,可能自带管理脚本(路径通常为/usr/local/php/sbin/php-fpm
),停止方法:
/usr/local/php/sbin/php-fpm stop
若脚本不支持stop
参数,可通过kill
方式终止主进程(同方法三)。
不同停止方法对比
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
systemctl | systemd系统(主流发行版) | 统一管理,支持状态检查 | 需确认服务名 |
service | SysV init系统(老版本) | 兼容性好 | 逐渐被systemd取代 |
kill信号 | 所有系统,或服务管理失效时 | 灵活,可精细控制 | 需手动查找PID,操作风险较高 |
源码安装管理脚本 | 源码编译安装的php-fpm | 直接操作进程 | 非所有版本都支持 |
注意事项
- 停止前检查请求状态:若网站正在运行,建议在低峰期停止php-fpm,避免影响用户请求。
- 确认服务名称:不同PHP版本或安装方式可能导致服务名不同(如
php-fpm
与php8.1-fpm
),需通过systemctl list-units
或service --status-all
确认。 - 避免强制停止:优先使用
TERM
信号或systemctl stop
,避免KILL
信号导致数据丢失或服务异常。 - 停止后验证:通过
ps
命令或netstat -tuln | grep php-fpm
确认进程和端口是否已释放。
相关问答FAQs
问题1:停止php-fpm后网站访问提示“502 Bad Gateway”怎么办?
解答:502错误通常是因为后端php-fpm服务未启动或无法连接,需先检查php-fpm状态(systemctl status php-fpm
),确认是否未启动;若已停止,尝试重新启动(systemctl start php-fpm
),同时检查nginx/apache的fastcgi_pass
配置(如fastcgi_pass 127.0.0.1:9000;
)是否与php-fpm监听地址一致,以及防火墙是否阻止了端口通信。
问题2:如何优雅停止php-fpm并处理完当前正在执行的请求?
解答:使用kill -QUIT
信号向php-fpm主进程发送终止请求,该信号会通知php-fpm停止处理新请求,但等待当前正在处理的请求完成后退出,操作步骤:①通过ps aux | grep "php-fpm: master process"
查找主进程PID;②执行kill -QUIT <PID>
;③通过ps aux | grep php-fpm
观察子进程是否全部退出,确认停止完成。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/15754.html