本文目录导读:

- 使用 systemctl(主流 Linux 发行版,如 CentOS 7+、Ubuntu 16+、Debian 8+)
- 使用 service 命令(旧版系统)
- 使用信号的平滑重启(无需中断服务)
- 在不同操作系统上的特定命令
- 使用 kill 命令手动控制(不推荐,除非没有 systemd)
- 常见问题排查
在 PHP 开发和运维中,“重启 PHP”通常指重启 PHP-FPM(PHP FastCGI Process Manager)进程,因为 PHP-FPM 是处理动态请求的核心服务,以下是针对不同环境和场景的重启方法:
使用 systemctl(主流 Linux 发行版,如 CentOS 7+、Ubuntu 16+、Debian 8+)
# 重启 PHP-FPM(具体服务名可能不同,常见版本) sudo systemctl restart php7.4-fpm # PHP 7.4 sudo systemctl restart php8.1-fpm # PHP 8.1 sudo systemctl restart php8.0-fpm # PHP 8.0 # 或者通用命令(根据 PHP 版本) sudo systemctl restart php*-fpm # 查看状态 sudo systemctl status php*-fpm
使用 service 命令(旧版系统)
# 重启 PHP-FPM 服务 sudo service php7.4-fpm restart sudo service php8.1-fpm restart # 如果使用 php-fpm 直接运行(较少见) sudo service php-fpm restart
使用信号的平滑重启(无需中断服务)
PHP-FPM 支持两种重启方式:
- 优雅重启:处理完当前请求后再重启子进程
- 强制重启:立即杀掉所有子进程
# 方法1:使用 kill -USR2 信号(平滑重启主进程) sudo kill -USR2 $(cat /run/php/php7.4-fpm.pid) # 方法2:使用 reload 命令(推荐) sudo systemctl reload php7.4-fpm # 或 sudo service php7.4-fpm reload
在不同操作系统上的特定命令
Ubuntu/Debian(基于 apt)
sudo systemctl restart php7.4-fpm # 或旧版 sudo service php7.4-fpm restart
CentOS/RHEL(基于 yum/dnf)
# 查找已安装的 PHP-FPM 包 sudo systemctl list-units | grep php-fpm # 重启 sudo systemctl restart php-fpm
macOS(Homebrew 安装)
# 重启 Homebrew 安装的 PHP-FPM brew services restart php@7.4 brew services restart php@8.1
Docker 容器内
# 在容器内重启 PHP-FPM docker exec -it <container_name> service php8.1-fpm restart # 或使用 supervisor 管理 docker exec -it <container_name> supervisorctl restart php-fpm
使用 kill 命令手动控制(不推荐,除非没有 systemd)
# 找到 PHP-FPM 主进程 PID
ps aux | grep php-fpm | grep -v grep | head -n 1 | awk '{print $2}'
# 发送信号
sudo kill -INT <PID> # 立即关闭
sudo kill -USR2 <PID> # 平滑重启
sudo kill -QUIT <PID> # 优雅关闭
常见问题排查
如果重启失败:
# 检查 PHP-FPM 是否已安装 which php-fpm php-fpm -v # 查看错误日志 tail -f /var/log/php*-fpm.log tail -f /var/log/php*-error.log # 检查配置文件语法 php-fpm -t
重启后立即生效的场景
- 修改了
php.ini配置 - 修改了
pool.d/www.conf配置 - 代码文件修改(通常不需要重启,因为 PHP 是解释执行)
- 添加了新的 PHP 扩展(需要重启)
| 环境 | 推荐命令 |
|---|---|
| systemd 系统 | sudo systemctl restart php*-fpm |
| 传统 SysV | sudo service php*-fpm restart |
| 平滑重启 | sudo systemctl reload php*-fpm |
| macOS | brew services restart php@* |
| Docker | docker exec -it <容器名> service php*-fpm restart |
注意:重启 PHP-FPM 会临时中断服务(<1 秒),生产环境建议使用 reload 或 kill -USR2 平滑重启。