2026-05-10 12:47:30
PHP服务的重启需根据运行模式选择对应方法,核心是重启其宿主环境(如PHP-FPM、Apache或容器),同时需注意缓存清理与生产环境风险控制。
一、根据运行模式选择重启方式PHP-FPM模式(最常见)
Systemd系统(Ubuntu 16.04+/CentOS 7+)
通用命令:sudo systemctl restart php-fpm
指定版本:sudo systemctl restart php7.4-fpm 或 php8.2-fpm
效果:停止主进程及子进程,重新加载配置和代码。
SysVinit系统(老旧Linux发行版)
通用命令:sudo service php-fpm restart
指定版本:sudo service php7.4-fpm restart
Apache模块模式(mod_php)
重启Apache服务以生效PHP配置:
Debian/Ubuntu:sudo systemctl restart apache2
CentOS/RHEL:sudo systemctl restart httpd
Docker容器模式
单个容器:docker restart [容器名称或ID]
Docker Compose:docker-compose restart [服务名称]
开发环境内置服务器
终止当前进程(Ctrl+C),重新运行 php -S localhost:8000。
OPcache缓存
问题:OPcache缓存编译后的字节码,导致代码或配置更新后未生效。
解决方案:
彻底方式:重启PHP-FPM服务(清空OPcache)。
开发环境临时清空:在测试脚本中调用 opcache_reset()。
配置调整:修改 php.ini 中的 opcache.revalidate_freq(检查文件更新频率,单位秒,0表示每次请求检查)和 opcache.validate_timestamps(是否验证文件时间戳)。
应用层缓存
问题:框架(如Laravel、Symfony)或CMS(如WordPress)的缓存机制未清理。
解决方案:
Laravel:执行 php artisan cache:clear、php artisan config:clear、php artisan route:clear、php artisan view:clear。
WordPress:清理插件缓存(如WP Super Cache、W3 Total Cache)或删除 wp-content/cache 目录下的文件。
其他框架/CMS:查阅文档,使用对应缓存清理命令。
Web服务器与浏览器缓存
问题:Nginx/Apache的代理缓存或FastCGI缓存、浏览器缓存导致旧内容显示。
解决方案:
Nginx/Apache:执行 nginx -s reload 或重启Apache。
浏览器:强制刷新页面(Ctrl+F5或Cmd+Shift+R)或清除浏览器缓存。
核心风险
服务中断:直接重启可能导致短暂空窗期,用户请求失败(如502错误)。
配置错误:新配置文件语法错误可能导致服务无法启动。
资源激增:重启瞬间CPU和内存峰值可能影响系统稳定性。
会话丢失:内存中存储的会话(如Redis/Memcached)可能因重启丢失,用户需重新登录。
最佳实践
优先平滑重启(Reload)
PHP-FPM:sudo systemctl reload php-fpm(新worker处理新请求,旧worker优雅退出)。
Apache/Nginx:sudo systemctl reload apache2 或 nginx(重新加载配置不中断服务)。
注意:部分配置更改(如PHP-FPM的listen地址)需完全重启生效。
选择低峰期操作:在流量最低时段执行重启,减少用户影响。
预先测试:在开发、测试或预发布环境验证配置和重启流程。
自动化部署:使用Ansible、Capistrano等工具执行标准化重启流程。
备份配置:修改前备份关键配置文件(如php.ini、php-fpm.conf)。
实时监控:重启前后关注服务器指标(CPU、内存、网络IO)和错误日志。
灰度发布:多服务器环境下分批重启,或通过负载均衡器实现无缝切换。
清理应用缓存:重启后清理框架/CMS缓存,确保配置彻底生效。
Systemd:sudo systemctl status php-fpm,确认 Active: active (running) 及启动时间。
重启前:ps aux | grep php-fpm | grep -v grep,记录主进程PID。
重启后:再次运行命令,确认PID变化。
路径示例:/var/log/php-fpm/www-error.log 或 /var/log/php7.4-fpm.log。
实时查看:tail -f /var/log/php-fpm/www-error.log。
创建 info.php(内容为 <?php phpinfo(); ?>),访问后确认:
PHP版本是否正确。
加载的配置文件路径(Loaded Configuration File)。
OPcache状态及具体配置项是否生效。
访问依赖重启配置的功能(如数据库连接页面),验证实际效果。