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
当工人没有记录任何数字时。
level
是
info
退出代码为 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,
'记忆'
=>
$事件
->
内存使用情况]);});
可以用它来统计仪表盘上每个原因的退出次数,或者将每次退出推送到指标后端。







