thinkphp6 本身无常驻服务,所谓“重启”实为操作其运行载体:开发用 php think run 需手动 ctrl+c 后重启;生产环境需重启 apache/nginx 或 php-fpm;队列进程 queue:listen 需借助 supervisord 等守护工具实现自动恢复。

ThinkPHP6 本身没有内置的“服务”概念,它不常驻内存运行,所以不存在传统意义上的「重启 TP6 服务」;你真正要操作的是:启动/停止/重启 php 进程、Web 服务器(如 Apache/Nginx)、或队列进程(如 queue:listen)——取决于你当前用的是哪种运行模式。
php think run 启动后怎么“重启”
开发时常用 php think run 启动内置服务器,但它不支持热重载或平滑重启。每次改完代码必须手动终止再重跑:
- 按
Ctrl+C中断当前进程 - 再执行
php think run(或带参数,如php think run -p 8080) - 如果提示端口被占用,先查进程:
lsof -i :8000(macOS/Linux)或netstat -ano | findstr :8000(Windows),再kill -9 PID或taskkill /PID PID /F
注意:php think run 只适合开发调试,不能用于生产环境——它没进程守护、无自动恢复、不处理并发压力。
生产环境用 Apache/Nginx 时,重启的是 Web 服务器
TP6 的 public 目录是 Web 入口,实际运行依赖 Web 服务器。修改了路由、中间件或配置后,一般不需要重启 PHP,但以下情况需重启 Web 服务:
- 修改了
.htaccess(Apache)或nginx.conf(Nginx)中的重写规则 - 启用了新模块(如
mod_rewrite)或调整了 PHP 处理方式(如从mod_php切到php-fpm) - PHP 配置(
php.ini)变更影响了全局行为(如opcache.enable)
对应命令:
sudo systemctl restart apache2 # Ubuntu/Debian Apache sudo systemctl restart httpd # CentOS/RHEL Apache sudo systemctl restart nginx # Nginx sudo systemctl restart php-fpm # 如果用 php-fpm,也建议顺带重启
别只重启 php-fpm 而忽略 Web 服务器——两者协作才能生效。
队列进程(think-queue)需要手动守护和重启
php think queue:listen 是一个长生命周期的 CLI 进程,崩溃后不会自恢复。生产中必须加守护机制:
- 用
supervisord:配置autorestart=true,进程挂掉会自动拉起 - 用 crontab 脚本轮询(如知识库里的
tp6_cmd.sh):每分钟检查一次ps -ef | grep queue:listen,没运行就启动 - 别直接后台运行
nohup php think queue:listen &—— 没日志、没错误捕获、挂了不知道
重启单个队列进程只需:
ps aux | grep "queue:listen" | grep -v grep | awk '{print $2}' | xargs kill -9
php think queue:listen --queue=high,default --delay=3 --memory=128 --tries=3
注意参数顺序和值:比如 --memory=128 控制内存上限,超限会被系统 kill,不是 PHP 内存限制;--tries 是任务失败重试次数,不是进程重启次数。
最易被忽略的一点:TP6 的「重启」从来不是框架层的事,而是你选择的运行载体(内置 server / Apache / Nginx / supervisor)决定的。搞错对象,比如反复 composer update 却不 reload nginx,问题永远还在。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











