升到 OpenClaw 2026.3.8 后定时任务全废了?你不是一个人。
症状:openclaw cron run 返回 {ok: true, enqueued: true},但任务永远不执行。jobs.json 里 runningAtMs 卡住不动,日志里一片沉默——没报错,没执行,就是不动。
换模型没用,改超时没用,因为根本不是模型的问题。
根因:3.8 版本引入了 owner-auth 安全硬化,顺带制造了一个经典死锁。
手动触发 cron 时,enqueueRun 函数在 "cron" lane 上排队(并发上限=1),里面的 embedded agent 执行时又去排同一个 "cron" lane。外层占着坑等内层完成,内层排着队等外层让位——永远等下去。
定时触发不受影响,因为定时器走的是另一条不经过 enqueueCommandInLane 的路径。
官方已确认(GitHub #41405),修复合入了 main 分支但还没发版。等不及的可以自己打补丁👇
文件位置:
node全局路径/lib/node_modules/openclaw/dist/gateway-cli-C2ZZYgwu.js
搜索 enqueueRun 函数(大概 7169 行附近),找到:
enqueueCommandInLane(CommandLane.Cron, async () => {
改成:
enqueueCommandInLane("cron-manual", async () => {
就改这一个单词。保存后 openclaw gateway restart。
原理:手动触发走独立的 "cron-manual" lane,不再和 embedded agent 抢同一个 "cron" lane 的独占锁,死锁链断开。定时任务完全不受影响。
注意:openclaw update 升级后补丁会被覆盖,届时看新版本是否已包含官方修复(commit 825a43570)。
受影响的组合:sessionTarget: "isolated" + payload.kind: "agentTurn" + 手动触发,三个条件同时满足才会死锁。
夜雨聆风