Horizon中Supervisor与队列异常:本地正常生产环境无监控信息且任务待处理
生产环境Laravel Horizon异常排查与解决
问题现象
- 本地部署的Horizon运行正常,仪表盘可正常展示Supervisor信息及当前工作负载
- 生产环境Horizon仪表盘状态显示为
Active,但无法加载Supervisor信息、当前工作负载数据,同时存在批量任务处于待处理状态 - 生产环境仪表盘表现:界面仅显示Active状态标识,无任何Supervisor列表、任务统计及待处理任务详情
已尝试操作
- 添加Supervisor配置
- 将
QUEUE_CONNECTION环境变量更新为redis - 执行命令
php artisan horizon:terminate
排查与解决建议
1. 验证Horizon进程状态
登录生产环境服务器,执行以下命令确认Horizon是否真的在运行:
ps aux | grep horizon
如果未找到Horizon进程,执行启动命令:
php artisan horizon
若进程存在但无响应,强制终止后重启:
pkill -f horizon php artisan horizon
2. 检查Redis连接与权限
确保生产环境Redis服务正常运行,且Horizon使用的Redis配置(config/database.php中redis项)与本地一致,验证连接:
php artisan tinker > Redis::ping();
若返回PONG则连接正常,否则检查Redis地址、端口、密码及防火墙规则,确保应用服务器能访问Redis服务。
3. 确认Supervisor配置正确性
检查生产环境Supervisor的Horizon配置文件(通常位于/etc/supervisor/conf.d/horizon.conf),确保配置内容正确:
[program:horizon] process_name=%(program_name)s_%(process_num)02d command=php /path-to-your-project/artisan horizon autostart=true autorestart=true user=your-server-user numprocs=1 redirect_stderr=true stdout_logfile=/path-to-your-project/storage/logs/horizon.log stopwaitsecs=3600
更新配置后重启Supervisor:
supervisorctl reread supervisorctl update supervisorctl start horizon:*
4. 查看Horizon日志
检查Horizon日志文件(默认路径storage/logs/horizon.log),查找错误信息:
tail -f storage/logs/horizon.log
根据日志中的错误提示针对性修复,比如权限问题、依赖缺失、队列配置错误等。
5. 验证队列任务配置
确认生产环境队列任务的连接配置与Horizon一致,检查.env文件中的QUEUE_CONNECTION是否确实为redis,且Horizon配置文件(config/horizon.php)中的environments对应生产环境的队列配置正确:
'environments' => [ 'production' => [ 'supervisor-1' => [ 'maxProcesses' => 10, 'balanceMaxShift' => 1, 'balanceCooldown' => 3, 'queue' => ['default'], ], ], ],
6. 清理缓存与配置
执行以下命令清理应用缓存,确保配置生效:
php artisan config:clear php artisan cache:clear php artisan horizon:publish
内容的提问来源于stack exchange,提问作者Parth
相关产品推荐
相关产品推荐

