Skip to content

[Bug]: Cron jobs are not executing as scheduled. #58833

Description

@juechangli

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

OpenClaw Cron 调度时间偏移严重,执行时间记录不准确

问题描述

配置为每3分钟执行一次的OpenClaw cron任务,实际执行间隔严重偏离(如:14:40 → 14:58,间隔18分钟)。即使使用 --exact 参数禁用随机延迟,任务仍无法按预期频率执行。

环境信息

  • OpenClaw版本: 2026.3.23-2 (7ffe7e4)
  • 操作系统: macOS 25.3.0 (Darwin Kernel Version 25.3.0, ARM64)
  • Node.js版本: v24.14.0
  • Shell: zsh

复现步骤

  1. 创建一个简单的shell脚本(执行时间约1-2秒)
  2. 添加cron任务:openclaw cron add --name "test-task" --cron "*/3 * * * *" --system-event "/path/to/script.sh"
  3. 监控任务执行日志和OpenClaw状态

预期行为

  • 任务每3分钟准时执行一次(每分钟的0、3、6、9、12...秒)
  • lastDurationMs 准确反映脚本实际执行时间(1-2秒)

实际行为

时间偏移问题

  • 配置:*/3 * * * *(每3分钟)
  • 实际执行:14:40 → 14:58 → 下一次未知(间隔18分钟,严重偏离)
  • 即使使用 --exact --staggerMs 0,任务仍不能准时执行

执行时间记录错误

  • 脚本实际执行时间:1-2秒(日志确认)
  • OpenClaw记录的 lastDurationMs:145秒、237秒等(严重夸大)
  • 这可能导致调度器误认为任务仍在运行,跳过后续触发

相关配置与日志

任务配置(JSON片段)

{
  "name": "shanghai-weather-email-3min",
  "schedule": {
    "kind": "cron",
    "expr": "*/3 * * * *",
    "tz": "Asia/Shanghai",
    "staggerMs": 0  // 使用 --exact 参数设置
  },
  "state": {
    "lastRunAtMs": 1775027671714,  // 2026-04-01 15:14:31
    "lastDurationMs": 144936,      // 145秒(实际仅需1秒)
    "lastRunStatus": "ok"
  }
}


### Steps to reproduce

脚本日志(实际执行时间)

[2026-04-01 14:40:09] 🚀 开始执行 → [2026-04-01 14:40:10] 🏁 脚本执行完成 (1秒)
[2026-04-01 14:58:28] 🚀 开始执行 → [2026-04-01 14:58:29] 🏁 脚本执行完成 (1秒)

可能的原因分析

  1. 默认随机延迟机制:OpenClaw cron默认添加随机延迟(stagger),即使cron表达式精确
  2. 执行时间计算错误lastDurationMs 可能包括队列等待、进程启动等开销,而非仅脚本执行时间
  3. 调度器逻辑缺陷:如果任务记录的执行时间超过调度间隔,可能被误判为"仍在运行"而跳过
  4. 时间同步/时区处理:毫秒级时间戳转换或时区处理可能引入误差

影响

  1. 定时任务不可靠:无法依赖OpenClaw cron进行精确时间调度
  2. 监控误报:执行时间记录错误导致性能监控数据失真
  3. 任务堆积/丢失:长时间运行的任务可能阻塞后续执行,短时间任务可能被跳过

建议的解决方案

  1. 修复时间计算lastDurationMs 应准确反映用户脚本执行时间,不包括系统开销
  2. 改进调度算法:即使任务"记录"的运行时间超过间隔,也应检查进程实际状态
  3. 提供调试工具:如 openclaw cron debug <id> 查看详细调度时间线
  4. 文档明确说明:明确cron调度精度限制和stagger机制的影响

临时解决方法

目前用户不得不退回到系统cron(crontab)以获得精确调度:

# 在系统crontab中
*/3 * * * * /path/to/script.sh

附件

  • 完整脚本示例
  • OpenClaw cron list --json 输出
  • 详细执行日志

Expected behavior

应该为配置的时间触发

Actual behavior

时间不固定,会漂移

OpenClaw version

v2026.3.31 (running v2026.3.23-2).

Operating system

macos(26.3.1 (a) (25D771280a))

Install method

No response

Model

deepseek-reasoner

Provider / routing chain

https://api.deepseek.com

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Impact and severity


优先级: High(影响核心调度功能)
分类: Bug / Cron调度器

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingregressionBehavior that previously worked and now fails

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions