宝塔用Supervisor守护PHP异步进程,核心是启动方式、用户权限和命令路径三者匹配:需统一PHP命令行版本,使用常驻脚本(如queue:listen),以www用户在项目根目录下执行完整启动命令,并通过日志和进程验证自动重启是否生效。

宝塔面板用Supervisor守护PHP异步进程,核心是让脚本常驻运行、崩溃自动重启、日志可查。关键不在“装插件”,而在启动方式、用户权限和命令路径三者匹配。
一、确认PHP命令行版本与站点一致
Supervisor调用的是系统级PHP命令,不是Web环境的PHP。如果站点用PHP 8.1,但命令行默认是7.4,守护进程必然启动失败。
- 进入宝塔「软件管理」→ 找到对应PHP版本 → 点击「设置」→ 切换到「命令行版本」标签 → 勾选「设为当前命令行PHP版本」
- 终端执行
php -v验证是否已切到目标版本 - 常见报错如
Class not found、proc_open disabled,多数源于版本或禁用函数不一致
二、准备可长期运行的PHP脚本
Supervisor只适合守护“启动后不退出”的脚本,比如:
- Laravel/ThinkPHP 的队列监听:
php artisan queue:listen或php think queue:listen --queue default - Swoole HTTP服务:
php think swoole - 自定义Worker:
php /www/wwwroot/app.com/worker.php
注意:脚本里不能含 exit()、die() 或逻辑上快速结束;否则Supervisor会报“文件执行结束太快”。
立即学习“PHP免费学习笔记(深入)”;
三、在Supervisor中添加守护进程
进入宝塔左侧菜单「Supervisor进程守护」→ 「添加守护进程」,填写以下内容:
-
名称:英文,如
tp_queue(不能用中文或空格) -
启动用户:通常填
www(与网站运行用户一致,避免写入权限问题) -
运行目录:填项目根目录,如
/www/wwwroot/app.com(不是public子目录) -
启动命令:完整命令,如
php think queue:listen --queue default --sleep=3 --max-jobs=0 -
进程数量:填
1(单实例即可,多进程需配合队列驱动配置)
保存后状态显示“已停止”,点击右侧「启动」按钮手动触发首次运行。
四、验证与排错要点
启动后不要只看状态绿灯,要结合日志和实际行为判断是否真正在跑:
- 点击进程名右侧「日志」图标,查看实时输出——正常应持续打印监听日志,而非一闪而过就停
- 终端执行
ps aux | grep queue:listen,确认有对应PHP进程存在 - 主动 kill 进程(
kill -9 PID),等待10秒内观察是否自动拉起(autorestart=true默认生效) - 若报
FATAL Exited too quickly,大概率是PHP报错退出,重点查日志末尾的Warning或Fatal error



















