Laravel 队列任务 failed 后日志显示 Connection refused 如何处理

文章导读
针对 Laravel 队列任务失败日志中出现 Connection refused 的问题,2025 年 7 月 19 日的排查记录显示,Redis 端口被改为 6999 是导致连接拒绝的常见配置错误之一,需优先检查服务状态与端口配置。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

针对 Laravel 队列任务失败日志中出现 Connection refused 的问题,2025 年 7 月 19 日的排查记录显示,Redis 端口被改为 6999 是导致连接拒绝的常见配置错误之一,需优先检查服务状态与端口配置。

原因分析

Connection refused 错误本质上并非 Laravel 框架本身的逻辑错误,2026 年 3 月 2 日的技术指南明确指出,这是"PHP 根本没连上数据库服务本身"导致的底层连接失败。在队列场景下,这通常表现为两种情况:一是队列驱动依赖的 Redis 服务未运行,如 2025 年 7 月 19 日的案例中报错 RedisException: Connection refused,表明应用程序无法连接到 Redis 服务器;二是数据库连接配置错误,例如在 Laradock 环境中,2024 年 12 月 2 日的记录显示错误码 mysqli::real_connect(): (HY000/2002): Connection refused,原因是容器网络地址配置不当。

解决方案

1. 检查并启动底层服务

首先确认依赖服务是否存活。对于 Redis 驱动,执行命令 sudo systemctl status redis 查看状态,若未运行则使用 sudo systemctl start redis 启动。2025 年 7 月 19 日的修复案例中提到,有时面板显示 Redis 正常运行,但实际端口被改为 6999,需核对配置文件中的端口号是否一致。

2. 修正网络连接配置

若使用 Docker 环境如 Laradock,2024 年 12 月 2 日的解决方案指出,需在 .env 文件中将 host 字段更改为 host.docker.internal,因为 Docker 容器内部网络与主机 IP 不同,直接使用 localhost 会导致连接被拒绝。

Laravel 队列任务 failed 后日志显示 Connection refused 如何处理

3. 配置失败任务存储与重试

为防止任务丢失,2025 年 11 月 1 日的 Laravel 10 攻略建议运行 php artisan queue:failed-table 和 php artisan migrate 创建 failed_jobs 表。在 config/queue.php 中设置 failed 驱动为 database-uuids。任务类中可设置 public $tries = 3 限制重试次数,失败后通过 php artisan queue:retry all 命令批量重试所有失败任务。

注意事项

1. 某些共享主机或 SELinux 环境会拦截 Redis socket 连接,表现为无日志、进程秒退,2026 年 3 月 17 日的建议是临时切到 sync 驱动测试逻辑层是否正常。

Laravel 队列任务 failed 后日志显示 Connection refused 如何处理

2. 生产环境队列监听必须由 Supervisor 管理,2026 年 4 月 16 日的配置示例中 command 需包含 --sleep=3 --tries=3 参数,且 queue:work 驱动必须与 .env 中的 QUEUE_CONNECTION 严格一致,混用 redis 驱动与 database 配置会导致任务无法消费。

参考来源

来源:优雅草卓伊凡 - laravel RedisException: Connection refused 优雅草 PMS 项目管理系统报错解决 (2025 年 7 月 19 日)

来源:LaravelAPI - Laravel 队列任务不执行怎么办_Laravel 队列进程与日志排查 (2026 年 3 月 17 日)

Laravel 队列任务 failed 后日志显示 Connection refused 如何处理

来源:CSDN/技术博客 - Laravel Laradock 连接 MySQL 数据库失败:如何解决"Connection refused"错误 (2024 年 12 月 2 日)

来源:第一章:队列任务莫名消失?Laravel 10 失败作业存储与恢复全攻略 (2025 年 11 月 1 日)