Laravel 11 仍依赖 Supervisor 守护 queue:work 进程,未内置替代方案;需适配其默认 --max-jobs=250 和 --max-time=3600 退出策略,配置 autorestart=true、匹配 user 权限、按队列优先级分组管理,并结合结构化日志调试。

Laravel 11 并未内置替代 Supervisor 的新队列守护机制,它依然依赖外部进程管理工具(如 Supervisor)来长期运行 queue:work 进程。所谓“新版改进”,实际体现在 Laravel 11 对队列行为本身的增强(如更精细的内存控制、重试策略、队列分发逻辑),而非取消或重构对 Supervisor 的依赖。配置方式与 Laravel 10 及之前版本基本一致,但需注意几处关键适配点。
Supervisor 配置需匹配 Laravel 11 的队列退出策略
Laravel 11 默认仍启用 --max-jobs=250 和 --max-time=3600(即每处理 250 个任务或运行 1 小时自动退出),这是防止内存泄漏的主动设计。Supervisor 必须配合该行为,否则会误判为异常崩溃。
-
必须开启
autorestart=true:确保 worker 优雅退出后立即拉起新进程 -
避免设置
startretries过低:默认值 3 足够,频繁重启失败才需干预 -
命令中显式声明参数:例如
php /var/www/app/artisan queue:work --max-jobs=250 --max-time=3600,与config/queue.php中'options' => [...]保持一致
用户与权限配置更严格,避免日志写入失败
Laravel 11 推荐使用非 root 用户(如 www-data 或项目专属用户)运行队列进程,Supervisor 配置中 user= 必须与 Web 服务器一致,且该用户需有以下权限:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 对
storage/logs/和自定义日志路径(如/var/log/laravel-worker.log)的写入权限 - 对
storage/framework/cache/和storage/framework/queue/的读写权限 - 若使用 Redis 或 Database 驱动,确保该用户能正常连接对应服务(无防火墙或认证拦截)
多队列与优先级支持更清晰,Supervisor 可分组管理
Laravel 11 支持更明确的队列分发语义(如 dispatchOn('high')->onQueue('urgent')),Supervisor 可为不同优先级队列创建独立配置文件,实现资源隔离与监控分离:
-
/etc/supervisor/conf.d/laravel-urgent.conf:专跑--queue=urgent,numprocs=4,priority=900 -
/etc/supervisor/conf.d/laravel-default.conf:跑--queue=default,numprocs=6,priority=700 -
priority值越小越先启动,便于关键队列抢占资源
日志与调试建议升级到 Laravel 11 兼容方式
Supervisor 日志本身不变,但 Laravel 11 的队列 Job 日志更结构化,推荐结合使用:
- 在 Job 的
handle()中使用Log::channel('stack')->info(...)写入统一日志栈 - Supervisor 的
stdout_logfile保留原始输出,用于排查启动失败、PHP 解析错误等底层问题 - 用
tail -f /var/log/laravel-worker.log | grep "Processing"快速确认任务流入,避免仅看supervisorctl status的 RUNNING 状态误判业务健康度

















