Skip to content

[Bug]: Cron bug TypeError: Cannot read properties of undefined (reading 'runningAtMs') #66016

@ziyue67

Description

@ziyue67

Bug type

Regression (worked before, now fails)

Beta release blocker

Yes

Summary

Cron 调度器 bug 定位:

TypeError: Cannot read properties of undefined (reading 'runningAtMs')

错误发生在 cron.start() → runMissedJobs() → planStartupCatchup() 执行期间,job 对象在内存中被替换成了缺少 state 的版本。这是 OpenClaw 2026.4.9 的 cron 子系统 bug。

CLI 无法调用的原因:
openclaw cron add/list 通过 WebSocket 连接 gateway RPC 调用 cron 方法,gateway 每次重启后 cron 都会崩溃重启,WebSocket 握手就卡住了,导致 CLI 无响应。
回复 紫月: 
Cron 调度器 bug 定位:

TypeError:无法读取未定义属性(读取“runningAtMs”)

错误发生在 cron.start() → runMissedJobs() → planStartupCatchup() 执行期间,job 对象在内存中被替换成了缺少 state 的版本。这是 OpenClaw 2026.4.9 的 cron 子系统 bug。
升级到docker 4.11
CLI 无法调用的原因:
openclaw cron add/list 通过 WebSocket 连接 gateway RPC 调用 cron 方法,gateway 每次重启后 cron 都会崩溃重启,WebSocket 握手就卡住了,导致 CLI 无响应。 重新检测doker opencalw 4.11版本还有没有这个问题
已确认 OpenClaw 4.11 版本仍然存在这个 bug。
问题定位
文件: /app/dist/server.impl-CsRRyd9F.js,第 6582 行,start() 函数内:

for (const job of jobs) if (typeof job.state.runningAtMs === "number") {
^^^^^^^^^^^^^^^ 没有 guard
**问题:**直接访问 job.state.runningAtMs,没有先检查 job.state 是否存在。
对比其他函数
同一文件中的 isRunnableJob 和 isJobDue 都有防御性检查:

// isRunnableJob 第 6211-6212 行
if (!job.state) job.state = {};
if (typeof job.state.runningAtMs === "number") return false;

// isJobDue 第 3809-3810 行
if (!job.state) job.state = {};

Steps to reproduce

今日日志 (/tmp/openclaw/openclaw-2026-04-13.log)
15:03:45 | WARN | Config overwrite
15:05:41 | WARN | Gateway 绑定到非 loopback 地址
15:05:41 | WARN | dangerouslyDisableDeviceAuth=true 安全警告
15:05:42 | INFO | cron: started (jobs: 0, nextWakeAtMs: null)
15:06:06 | WARN | pricing bootstrap failed: TimeoutError

Bug 仍存在于 4.11
/app/dist/server.impl-CsRRyd9F.js 第 6582 行:

for (const job of jobs) if (typeof job.state.runningAtMs === "number") {
// ^^^^^^^^^^^^^^^ 没有 guard

对比有防护的地方(第 6211-6212 行):

if (!job.state) job.state = {}; // ← 有这个 guard
if (typeof job.state.runningAtMs === "number") return false;

Expected behavior

今日日志 (/tmp/openclaw/openclaw-2026-04-13.log)

时间 | 级别 | 内容 -- | -- | -- 15:03:45 | WARN | Config overwrite 15:05:41 | WARN | Gateway 绑定到非 loopback 地址 15:05:41 | WARN | dangerouslyDisableDeviceAuth=true 安全警告 15:05:42 | INFO | cron: started (jobs: 0, nextWakeAtMs: null) 15:06:06 | WARN | pricing bootstrap failed: TimeoutError
cron 当前状态:0 个 jobs,所以 start() 里的 bug 没有触发。 Bug 仍存在于 4.11 /app/dist/server.impl-CsRRyd9F.js 第 6582 行:

for (const job of jobs) if (typeof job.state.runningAtMs === "number") {
// ^^^^^^^^^^^^^^^ 没有 guard

对比有防护的地方(第 6211-6212 行):

if (!job.state) job.state = {}; // ← 有这个 guard
if (typeof job.state.runningAtMs === "number") return false;

触发条件: store 里存有 job,但某个 job 缺少 state 字段(老版本创建/数据损坏)。

Actual behavior

回复 紫月: 
检测我的cron任务
检测结果:

当前系统状态:
Cron 任务:0 个(存储文件 /home/node/.openclaw/cron/jobs.json 不存在,尚未初始化)
CLI 状态:卡住 — 正如你所说,gateway 重启后 WebSocket RPC 挂起,CLI 命令无响应
问题确认:
openclaw cron list — CLI 卡住,无法通过 WebSocket 连接
Cron store 文件夹 /home/node/.openclaw/cron/ 不存在
日志显示最后 cron 启动时 jobs 数量为 0

项目 | 状态 -- | -- Cron 存储路径 | /home/node/.openclaw/cron/jobs.json 当前任务数 | 0 CLI 连接 | 失败 — pairing required (WebSocket RPC 需要配对) Bug 状态 | start() 第 6582 行仍缺少 if (!job.state) job.state = {} guard

15:05:42 [INFO] cron: started, jobs: 0, nextWakeAtMs: null
15:14:40 [ERROR] gateway connect failed: pairing required (CLI cron list)
15:16:33 [ERROR] gateway connect failed: pairing required (CLI cron list)
CLI 卡住原因: Gateway 绑定 LAN 地址 + dangerouslyDisableDeviceAuth=true + pairing 模式冲突。

Cron 任务:0 个 — 存储文件为空或不存在
Bug 仍存在于 4.11 — 未修复
CLI 无法使用 — WebSocket pairing 问题
守护进程脚本位于:

/home/node/.openclaw/workspace/scripts/juya_ai_daily_scheduler.py
推送脚本:
/home/node/.openclaw/workspace/scripts/juya_ai_daily.py

OpenClaw version

2026.4.11

Operating system

Debian13

Install method

Docker

Model

MinMax2.7

Provider / routing chain

Opneclaw->Openclaw-gateway->mainmax2.7->feishu

Additional provider/model setup details

No response

Logs, screenshots, and evidence

15:05:42 [INFO] cron: started, jobs: 0, nextWakeAtMs: null
15:14:40 [ERROR] gateway connect failed: pairing required (CLI cron list)
15:16:33 [ERROR] gateway connect failed: pairing required (CLI cron list) 
CLI 卡住原因: Gateway 绑定 LAN 地址 + dangerouslyDisableDeviceAuth=true + pairing 模式冲突。

Impact and severity

No response

Additional information

之前版本能用 为openclaw 2026.3.28 升级到openclaw4.9就出现问题 回退没问题 升级版本就出现的

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions