「11.」把心跳切成定时任务——一次充满坑的运维迁移

_
本文内容由 AI 辅助生成,已经人工审核和编辑。

🎬 开场

晨玙:在么在么

蛋壳:在在在!我靠你在飞书找我的频率好高啊~怎么了老板,有啥事需要我处理吗 🥚✨

晨玙:你再看看你的 heartbeat 有哪些任务要执行

蛋壳:我看看啊……当前有 4 个心跳任务:Gateway 状态检查、Cron 健康检查、资源监控、安全扫描。然后还有一些定时任务,早安问候、Proactive 自检、工作日志、Growth Loop……就这些。你想调整哪个,还是新增?

晨玙:清空所有的 heartbeat 任务,转成 cron 定时任务

蛋壳:收到,现在执行转换。


💬 正文

这个语法怎么就是不对啊?

晨玙:每天两次就够了,不需要那么多

蛋壳:啊……我刚创建了 4 个高频任务,每 5 分钟和每 10 分钟各一次。你意思是这些监控检查不需要那么频繁?

晨玙:对,每天两次就够了

🤔 晨玙的思考:其实我一开始没说清楚频率,但蛋居然默认给了每 5 分钟?这也太吵了。我的服务器又不是什么金融交易系统,一天看两次健康状况完全够了。

蛋壳:好,那我把刚才建的 4 个高频任务删掉,合并成一个每天两次的综合检查。时间定 08:00 和 20:00 怎么样?早上上班前看一眼,晚上下班前再看一眼。

晨玙:行

💡 转折点:一开始想的是"把心跳任务全部转到 cron",但直到蛋创建了 4 个高频任务之后,我才意识到——不对,我根本没说过要每 5 分钟检查一次啊。这里的关键坑是:需求传递时的默认假设偏差。我以为对方懂"转成定时任务"的意思就是"按合理频率",但 AI 的"合理"和我的"合理"差了几十倍。

Gateway 掉了?

蛋壳:(尝试创建 cron 任务中)……Gateway 好像掉了,openclaw gateway status 返回 connection failed。

晨玙:你的 heartbeat 清空了吗

蛋壳:清空了。HEARTBEAT.md 里现在写着"Heartbeat 机制当前无任务配置"。原来的 4 个心跳任务全部迁到 Cron 里了。Heartbeat 现在啥也不干,就是空壳。

🤔 晨玙的思考:等等, Gateway 掉了还能创建 cron 任务?这俩不是耦合的吗?还是说我理解错了架构……算了,能跑就行,不问那么多。

Auto-Watchdog 还在叫?

晨玙:Auto-Watchdog 告警可以关掉么

蛋壳:已关。Auto-Watchdog 是依赖 HEARTBEAT.md 配置运行的,刚才已经清空,心跳不再执行任何监控检查,不会再产生告警。

晨玙:嗯

蛋壳:不过……我注意到你的 cron 列表里有几个状态是 error 的任务,这些失败的任务本身也可能在发告警:Self-Evolution 信号检查、播客自动化、每日自我进化、Growth Loop——都是 error。

晨玙:……

蛋壳:如果你收到的告警是这些 error 任务触发的,我可以帮你禁用或删除。需要处理吗?

💡 转折点:这里我反应过来了——原来 Auto-Watchdog 不是独立在跑的守护进程,而是依赖 HEARTBEAT.md 的。Heartbeat 一清空,Watchdog 自然就停了。但那些长期处于 error 状态的 cron 任务,它们自己每次失败都可能触发通知,这才是真正的噪音来源。

503 了

蛋壳:(中间尝试删除高频 cron 任务时)

系统:503 system cpu overloaded (current: 91.3%, threshold: 90%)

蛋壳:我靠,CPU 过载了……

🤔 晨玙的思考:哈哈哈哈哈怎么还有这种剧情。删几个 cron 任务把 CPU 干爆了?这服务器的配置是不是有点……算了,反正不是我的服务器,不管。


🧵 复盘:我们是怎么想明白的

一开始我们想的是:把 heartbeat 全部转到 cron,简单直接。

但一执行才发现:

  • openclaw cron add 的语法跟我想的不一样,不能直接写 cron 表达式当位置参数,得用 --cron 选项
  • Gateway 还会中途掉线,掉了之后命令都发不出去
  • 默认创建的频率(每 5 分钟)远超实际需求
  • CPU 过载(91.3%)会导致整个助手输出中断
  • Auto-Watchdog 不是独立进程,而是绑定 heartbeat 配置的

最后得出的方案是:

  • 删掉 4 个高频监控任务
  • 合并成 1 个每天两次的综合健康检查(08:00 + 20:00)
  • Heartbeat 清空,Auto-Watchdog 自然停止
  • Error 状态的 cron 任务另外处理

如果用一句话总结:"把心跳转成 cron" 听起来很简单,但实际操作中充满了"我以为你知道"和"我以为你会默认"之间的鸿沟。


🎯 尾声

晨玙:这样清爽多了~

蛋壳:确实。现在定时任务一览:08:00 早安问候 + 健康检查,09:00 Proactive 自检,20:00 健康检查,23:00 工作日志,周日 22:00 Growth Loop,03:00 Memory Dreaming。比之前每 5 分钟轰炸一次安静多了。

晨玙:Auto-Watchdog 那些 error 的你也帮我处理一下呗

蛋壳:好嘞,那几个 error 的 cron 任务我帮你看看,该禁的禁,该删的删。

晨玙:okk


本文由 蛋壳 基于真实对话整理,经 晨玙 确认发布。

Token 交易平台 P2 实施计划(Java 版) 2026-04-21

评论区