Skip to content

[社区] Cron 任务在列表中显示但从不执行:enabled、wakeMode 和 delivery.to 配置排查

问题

通过 openclaw cron list 可以看到任务,但任务从不触发执行,也没有错误日志。

常见原因(按排查优先级排序):

  1. cron.enabled 未设为 true(全局开关未打开)
  2. jobs.json 中任务的 enabled 字段为 false
  3. wakeMode 配置为 next-heartbeat,但 session 没有心跳
  4. delivery.to 指定的 agent ID 不匹配当前实例

解决方案

步骤一:确认全局 cron 开关已开启

bash
openclaw config get cron.enabled
# 如果不是 true,执行:
openclaw config set cron.enabled true

步骤二:检查任务本身的 enabled 状态

bash
openclaw cron list
# 确认每条任务的 enabled 字段为 true

步骤三:理解 wakeMode 的区别

wakeMode含义适用场景
immediate到时间立即唤醒新会话大多数定时任务
next-heartbeat等待下一次已有会话的心跳才触发依赖现有会话上下文的任务

如果任务设置了 wakeMode: "next-heartbeat" 但没有活跃的心跳会话,任务将永远等待。将 wakeMode 改为 immediate 可解决此问题。

步骤四:验证 delivery.to 目标

bash
# 查看当前 agent 配置的 ID
openclaw config get agents

# 确认任务的 delivery.to 与实际 agent ID 匹配
openclaw cron show <job-id>

重要提醒:不要在 Gateway 运行时直接编辑 jobs.json 文件,否则可能导致配置不一致。正确操作方式:

bash
openclaw gateway stop
# 编辑配置
openclaw gateway start

或使用 CLI 命令动态修改:

bash
openclaw cron set <job-id> enabled true