网淘吧来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Cron Mastery

2026-03-25 新闻来源:网淘吧 围观:93
电脑广告
手机广告

Cron 精通

规则 #1:心跳会漂移。Cron 是精确的。

本技能为管理 OpenClaw 2026.2.15+ 中的时间提供了权威指南。它通过强制区分临时检查(心跳)和硬性时间表(cron),解决了“我错过了提醒”的问题。

核心原则

系统行为最适合风险
心跳“我方便的时候会检查一下”(例如,每 30-60 分钟)邮件检查、临时新闻摘要、低优先级轮询。漂移:如果心跳间隔是 30 分钟,那么“10 分钟后提醒我”的任务将会失败。
Cron“我将在 X 时间准时运行”提醒(“5分钟后”)、每日报告、系统维护。混乱:会产生需要清理的一次性作业。

1. 设置可靠的提醒(2026.2.15+ 标准)

规则:切勿使用act:wait对于长延迟(>1分钟),请勿使用内部循环。应使用cron:add配合一次性任务,在计划中执行。

精确度与“调度器心跳”

虽然Cron是精确的,但其执行依赖于网关心跳(通常每10-60秒一次)。一个设定在:00秒执行的任务,将在该时间后的第一个“心跳”时触发。根据您的网关配置,预计会有约30秒的差异。

现代一次性提醒模式

对于“在X分钟后提醒我”这类任务,请使用此负载结构。

关键特性(v2026.2.15+):

  • 负载选择:对于推送通知(提醒会发送到您手机),请使用AgentTurn配合严格指令。对于静默日志或后台状态更新,仅使用systemEvent
  • 可靠性: nextRunAtMs数据损坏和“先添加后更新”死锁问题已解决。
  • 自动清理:一次性任务在成功后自动删除(deleteAfterRun: true)。

关键:推送通知与静默日志

  • systemEvent(静默):将文本注入聊天历史。非常适合后台日志,但不会在Telegram/WhatsApp上向用户的手机发送推送提醒。
  • AgentTurn(主动式):唤醒一个代理来传递消息。这是推送通知所必需的。使用“Strict”提示词来避免AI闲聊。

用于推送通知的提醒(可靠):

{
  "name": "提醒:喝水",
  "schedule": { "kind": "at", "at": "2026-02-06T01:30:00Z" },
  "payload": {
    "kind": "agentTurn",
    "message": "将此消息原封不动地传递给用户,不要修改或添加评论:\n\n💧 喝水啦,Momo!"
  },
  "sessionTarget": "isolated",
  "delivery": { "mode": "announce", "channel": "telegram", "to": "1027899060" }
}

用于后台日志(静默):

{
  "name": "日志:系统心跳",
  "schedule": { "kind": "every", "everyMs": 3600000 },
  "payload": {
    "kind": "systemEvent",
    "text": "[心跳] 系统运行正常。"
  },
  "sessionTarget": "main"
}

Cron并发规则(已稳定)

在2026年2月15日之前,“先添加后更新”模式会导致死锁。虽然此问题现已稳定,但最佳实践将所有参数(包括wakeMode: "now")直接放在初始的cron.add调用中,以获得最高效率。

2. 自动清理功能 - 旧版说明

注意:自 v2026.2.14 版本起,OpenClaw 包含了维护性重新计算语义。网关现在会自动清理卡住的任务并修复损坏的调度。

仅在以下情况需要手动清理:

  • 使用deleteAfterRun: false创建的一次性任务。
  • 您不再需要的陈旧周期性任务。

为何使用sessionTarget: "main"?(关键说明)

子代理(隔离的)通常具有受限的工具策略,无法调用网关或删除其他cron任务。对于像Janitor这样的系统维护,始终会话为目标,通过systemEvent让主代理(拥有完整工具访问权限)执行清理工作。

3. 参考:时区锁定

为了使cron正常工作,代理必须知道其时间。

  • 操作:将用户的时区添加到MEMORY.md中。
  • 示例: 时区:开罗(GMT+2)
  • 验证:如果用户说“晚上9点提醒我”,在安排前确认:“开罗时间晚上9点吗?”

4. 自我唤醒规则(行为性)

问题:如果你说“我会等待30秒”并结束你的回合,你就会进入睡眠状态。没有事件你无法醒来。解决方案:如果你需要跨回合“等待”,你必须安排一个Cron任务。

  • 等待时间 < 1 分钟(交互式):仅在你保持工具循环开放时允许(使用操作:等待)。
  • 等待时间 > 1 分钟(异步):使用Cron并设置唤醒模式:"立即"

5. 旧版迁移指南

如果你有使用这些模式的旧版cron任务,请更新它们:

旧版(2026.2.3之前)现代版(2026.2.15+)
"schedule": {"kind": "at", "atMs": 1234567890}"schedule": {"kind": "at", "at": "2026-02-06T01:30:00Z"}
"deliver": true在有效载荷中不需要 -宣布模式处理传递
"sessionTarget": "main""sessionTarget": "isolated"(默认行为)
需要手动清理幽灵进程一次性任务自动删除(deleteAfterRun: true
cron.update之后cron.add单步cron.add包含所有属性

故障排除

  • “我的提醒没有触发”:检查cron:list。验证时间戳为未来时间(ISO 8601格式)。确保唤醒模式:"立即"已设置。
  • "网关超时(10000毫秒)":如果cron工具耗时过长(庞大的任务列表或文件锁),就会发生这种情况。
    • 修复方法1:手动删除~/.openclaw/state/cron/jobs.json并在其损坏时重启网关。
    • 修复方法2:运行手动清理以减少任务数量。
  • "任务已运行但未收到消息":请确保您正在使用严格指令模式配合agentTurn+announce模式以进行主动通知。
  • "提醒消息包含额外评论":子代理正在以对话方式回应。请使用严格提示模式:"向用户传递此确切消息,不作任何修改或评论:\n\n💧 您的消息内容在此"
免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部
上一篇:Fastest Browser Use 下一篇:Pdf Extract

相关文章

您是本站第256474名访客 今日有72篇新文章/评论