Laravel 教程

Laravel queue:work 现在会打印出工作进程停止的原因

发布
Laravel queue:work 现在会打印出“为什么工作进程停止”的图片

A queue:work 进程可能因九种不同的原因退出,直到 Laravel 13.30 所有人的控制台输出看起来都一样。一个工人 在主管的指导下运行 每隔几分钟就重启一次的程序可能达到了内存限制、数据库连接断开或出现了其他问题。 queue:restart 从部署中区分它们意味着注册事件监听器或将重启与部署日志进行比对。

该命令现在会将原因写在最后一行:

2026-09-01 13:20:40 工作进程已停止,内存限制已超出

控制台和 JSON 输出

WorkCommand 注册一个监听器 WorkerStopping 除了已有的作业和队列状态信息外,停止行也以与其余输出相同的两种格式输出。 --json 它是与每项工作记录并列的记录:

{ “等级” : “信息” , “地位” : “停止” , “原因” : “空的” , 退出代码 : 0 , "jobs_processed" : 12 , “记忆” : 34.0 , “时间戳” : “2026-09-01T13:20:40.118273+00:00” }

reason 是枚举的后备值,可以稳定地进行匹配。 memory 兆字节四舍五入到小数点后一位,或者 null 当工人没有记录任何数字时。 levelinfo 退出代码为 0 和 warning 其他情况。

该行被跳过 --quiet--silent 当原因为空时。一个从外部被杀死的工人,被 OOM killer 或其他原因杀死。 SIGKILL 从其他地方发出的,永远不会运行分发事件的代码,因此这些出口保持静默。

停止原因和退出代码

WorkerStopReason 是一个已存在的枚举类型。此更改添加了一个 description() 这样做的目的是让控制台输出和你编写的任何监听器读取相同的字符串:

价值 描述 退出代码
empty 队列为空 0
empty_for 在配置的持续时间内队列为空 0
max_jobs 超出最大作业数 0
max_time 超出最大运行时间 0
restart_signal 收到重启信号 0
interrupted 中断 0
lost_connection 连接中断 0
memory 内存限制已超出 12
timed_out 任务超时 1

过滤 JSON 输出

一旦原因字段被定义,在日志中查找它就成为一种筛选方式:

php 工匠 队列:工作 --json --max-time=3600 2>&1 | \
杰奇 -c 'select(.status == "stopped")'

在进程管理器向文件写入数据的情况下,事后会对日志运行相同的查询。

工人停工事件

除了读取输出之外,该事件仍然是获取任何其他信息的最佳途径。它包含退出原因、退出状态、已处理的作业数、最后一个作业的时间戳以及工作进程退出时使用的内存:

使用 照亮\队列\事件\工作停止 ;
事件 :: 功能 工人停止 $event) {
日志 :: 信息 工人停止工作 ,[
'原因' => $事件 -> 原因 ?-> 价值,
'地位' => $事件 -> 地位,
“工作” => $事件 -> jobsProcessed,
'记忆' => $事件 -> 内存使用情况
]);
});

可以用它来统计仪表盘上每个原因的退出次数,或者将每次退出推送到指标后端。

贡献者 杰克·贝利斯#61339

保罗·雷德蒙德照片

Laravel News 特约撰稿人。全栈 Web 开发人员兼作家。

归档于

赞助

掌握 Laravel 标志
Laravel 代码审查

几天内即可获得 Laravel 代码审查方面的专家指导

访问 Laravel 代码审查
在 `php artisan dev` 镜像中排除供应商和默认命令

在 `php artisan dev` 中排除供应商和默认命令

阅读文章
Laracon 档案图像

Laracon档案

阅读文章
在 Laravel 中使用 chunkBy() 将相邻的集合项分组 图片

在 Laravel 中使用 chunkBy() 对相邻集合项进行分组

阅读文章
Sidecar 将 Statamic 的控制面板集成到您现有的 Markdown 网站中(图片)

Sidecar 将 Statamic 的控制面板带到您现有的 Markdown 网站

阅读文章
Laravel 13.30 图片中的集合 chunkBy() 和存储路径强化

Laravel 13.30 中的集合 chunkBy() 和存储路径强化

阅读文章
Forte:解析和重写 Laravel Blade 模板图像

Forte:解析和重写 Laravel Blade 模板

阅读文章