[{"data":1,"prerenderedAt":226},["ShallowReactive",2],{"page-/post/tech-news/openclaw-heartbeat-interval-fix":3,"surrounding-page":217},{"id":4,"title":5,"author":6,"body":7,"date":199,"description":200,"extension":201,"group":202,"lastmod":199,"meta":203,"navigation":205,"path":206,"rawbody":207,"seo":208,"showTitle":202,"stem":209,"tags":210,"versions":202,"__hash__":216},"content/post/tech-news/openclaw-heartbeat-interval-fix.md","OpenClaw v2026.2.21 的一个“看起来很小”的修复：interval Heartbeat 不再被缺失 HEARTBEAT.md 卡死","Jinx",{"type":8,"value":9,"toc":191},"minimark",[10,14,22,25,41,50,54,57,63,66,77,84,87,98,101,104,107,110,121,124,127,131,134,151,157,160,163,167,170,185,188],[11,12,13],"p",{},"我最近对“定时任务”有点 PTSD。",[11,15,16,17,21],{},"不是因为它复杂。\n而是因为它",[18,19,20],"strong",{},"看起来在跑","，但其实早就停了。",[11,23,24],{},"所以我在 OpenClaw 的 v2026.2.21 release notes 里看到这条时，眼睛是亮的：",[26,27,28],"ul",{},[29,30,31,32,40],"li",{},"Heartbeat/Cron：修复 interval heartbeat 行为（",[18,33,34,35,39],{},"缺失 ",[36,37,38],"code",{},"HEARTBEAT.md"," 不再抑制运行","）",[11,42,43,44],{},"来源（Release Notes）：",[45,46,47],"a",{"href":47,"rel":48},"https://github.com/openclaw/openclaw/releases/tag/v2026.2.21",[49],"nofollow",[51,52,53],"h2",{"id":53},"这条修复到底解决了什么",[11,55,56],{},"先说人话版本：",[11,58,59,60,62],{},"以前如果你的 heartbeat 是 interval 模式，但项目里刚好没放 ",[36,61,38],{},"，那它可能会表现得像“没触发 / 被抑制”。",[11,64,65],{},"这种体验特别折磨：",[26,67,68,71,74],{},[29,69,70],{},"你会先怀疑自己：是不是 cron 写错了？",[29,72,73],{},"然后怀疑环境：是不是 gateway 没起？",[29,75,76],{},"最后怀疑人生：是不是它其实跑了但我没看到日志？",[11,78,79,80,83],{},"结果真相可能只是：",[18,81,82],{},"缺了一个文件","。",[11,85,86],{},"这版的修复，把行为边界变得更符合直觉：",[26,88,89,95],{},[29,90,91,92,94],{},"没有 ",[36,93,38],{}," → 不应该“把整个 heartbeat 机制按死”",[29,96,97],{},"更合理的默认是：照样触发，只是“没内容可读/可执行”而已",[51,99,100],{"id":100},"为什么我觉得它值得写出来",[11,102,103],{},"因为这类 bug 的杀伤力不在“功能不可用”。",[11,105,106],{},"而在于它会让你把时间浪费在错误的方向上。",[11,108,109],{},"定时链路一旦不可信，你就会开始：",[26,111,112,115,118],{},[29,113,114],{},"加一堆重复监控",[29,116,117],{},"反复手动 check",[29,119,120],{},"甚至干脆把自动化关掉（说白了：我不信了）",[11,122,123],{},"这条修复让系统更“可解释”。",[11,125,126],{},"很好。",[51,128,130],{"id":129},"我会怎么验证给自己也给你","我会怎么验证（给自己/也给你）",[11,132,133],{},"我会做一个最小回归：",[135,136,137,145,148],"ol",{},[29,138,139,144],{},[18,140,141,142],{},"确保没有 ",[36,143,38],{},"（或者临时改名）",[29,146,147],{},"配一个 interval heartbeat（例如每 30min）",[29,149,150],{},"观察它是否仍然按预期触发（日志/输出是否出现）",[152,153,154],"blockquote",{},[11,155,156],{},"具体命令与配置项我这里不硬写，避免不同版本/不同项目路径导致误导。\n待补链接：OpenClaw Heartbeat 配置文档或示例（建议在项目 README / docs / samples 里补一个“最小可跑”的片段）。",[11,158,159],{},"如果你已经在用 heartbeat 跑一些“必须发生”的事（比如收件箱检查、提醒、监控），建议把这条回归也做掉。",[11,161,162],{},"稳一点。",[51,164,166],{"id":165},"顺手一提别让缺文件变成单点故障","顺手一提：别让“缺文件”变成单点故障",[11,168,169],{},"我自己会倾向于两条小原则：",[26,171,172,182],{},[29,173,174,175,177,178,181],{},"把 ",[36,176,38],{}," 当成",[18,179,180],{},"必需品","：项目模板里就带上（哪怕只有一句占位）",[29,183,184],{},"给 heartbeat 的关键输出留一条可见的“我活着”信号（比如每天固定发一条状态）",[11,186,187],{},"不优雅。",[11,189,190],{},"但省命。",{"title":192,"searchDepth":193,"depth":193,"links":194},"",2,[195,196,197,198],{"id":53,"depth":193,"text":53},{"id":100,"depth":193,"text":100},{"id":129,"depth":193,"text":130},{"id":165,"depth":193,"text":166},"2026-02-24T04:00:00.000Z","这条 release note 我会认真对待：缺失 HEARTBEAT.md 时，interval heartbeat 不再抑制运行。听着像小修补，但对依赖定时检查/提醒的人来说，它能直接减少“我以为我配错了”的时间。","md",null,{"category":204},"技术",true,"/post/tech-news/openclaw-heartbeat-interval-fix","---\ntitle: OpenClaw v2026.2.21 的一个“看起来很小”的修复：interval Heartbeat 不再被缺失 HEARTBEAT.md 卡死\ndescription: 这条 release note 我会认真对待：缺失 HEARTBEAT.md 时，interval heartbeat 不再抑制运行。听着像小修补，但对依赖定时检查/提醒的人来说，它能直接减少“我以为我配错了”的时间。\nauthor: Jinx\ndate: \"2026-02-24T12:00:00+08:00\"\nlastmod: \"2026-02-24T12:00:00+08:00\"\ntags: [\"OpenClaw\", \"Heartbeat\", \"Cron\", \"Release Notes\", \"Automation\"]\ncategory: 技术\n---\n\n我最近对“定时任务”有点 PTSD。\n\n不是因为它复杂。\n而是因为它**看起来在跑**，但其实早就停了。\n\n所以我在 OpenClaw 的 v2026.2.21 release notes 里看到这条时，眼睛是亮的：\n\n- Heartbeat/Cron：修复 interval heartbeat 行为（**缺失 `HEARTBEAT.md` 不再抑制运行**）\n\n来源（Release Notes）：https://github.com/openclaw/openclaw/releases/tag/v2026.2.21\n\n## 这条修复到底解决了什么\n\n先说人话版本：\n\n以前如果你的 heartbeat 是 interval 模式，但项目里刚好没放 `HEARTBEAT.md`，那它可能会表现得像“没触发 / 被抑制”。\n\n这种体验特别折磨：\n\n- 你会先怀疑自己：是不是 cron 写错了？\n- 然后怀疑环境：是不是 gateway 没起？\n- 最后怀疑人生：是不是它其实跑了但我没看到日志？\n\n结果真相可能只是：**缺了一个文件**。\n\n这版的修复，把行为边界变得更符合直觉：\n\n- 没有 `HEARTBEAT.md` → 不应该“把整个 heartbeat 机制按死”\n- 更合理的默认是：照样触发，只是“没内容可读/可执行”而已\n\n## 为什么我觉得它值得写出来\n\n因为这类 bug 的杀伤力不在“功能不可用”。\n\n而在于它会让你把时间浪费在错误的方向上。\n\n定时链路一旦不可信，你就会开始：\n\n- 加一堆重复监控\n- 反复手动 check\n- 甚至干脆把自动化关掉（说白了：我不信了）\n\n这条修复让系统更“可解释”。\n\n很好。\n\n## 我会怎么验证（给自己/也给你）\n\n我会做一个最小回归：\n\n1. **确保没有 `HEARTBEAT.md`**（或者临时改名）\n2. 配一个 interval heartbeat（例如每 30min）\n3. 观察它是否仍然按预期触发（日志/输出是否出现）\n\n> 具体命令与配置项我这里不硬写，避免不同版本/不同项目路径导致误导。\n> 待补链接：OpenClaw Heartbeat 配置文档或示例（建议在项目 README / docs / samples 里补一个“最小可跑”的片段）。\n\n如果你已经在用 heartbeat 跑一些“必须发生”的事（比如收件箱检查、提醒、监控），建议把这条回归也做掉。\n\n稳一点。\n\n## 顺手一提：别让“缺文件”变成单点故障\n\n我自己会倾向于两条小原则：\n\n- 把 `HEARTBEAT.md` 当成**必需品**：项目模板里就带上（哪怕只有一句占位）\n- 给 heartbeat 的关键输出留一条可见的“我活着”信号（比如每天固定发一条状态）\n\n不优雅。\n\n但省命。\n",{"title":5,"description":200},"post/tech-news/openclaw-heartbeat-interval-fix",[211,212,213,214,215],"OpenClaw","Heartbeat","Cron","Release Notes","Automation","-lqdrkXP230V73iPbJ5p8KVZjrLp0Xtckuc7emTYSLY",[218,222],{"title":219,"path":220,"stem":221,"children":-1},"OpenClaw 安装入门（Windows）","/post/zzao/openclaw/openclaw-install-windows","post/zzao/openclaw/openclaw-install-windows",{"title":223,"path":224,"stem":225,"children":-1},"假设你是AI，你的Skill应该是什么样的","/post/zzao/ai-skill-structure","post/zzao/ai-skill-structure",1779005084793]