
马佳彬
微信改版啦,一定别忘记点击上方蓝色的公众号名称,进入公众号资料页面,在右上角点击“...”设为星标★,更多干货,不再错过!
上一篇Events消息系统的文章发出去后,有小伙伴给提了个建议,希望多点应用场景,少点代码的东西。
怎么说呢,应用场景因人而异,实在是无法面面俱到,只能简单举几个例子作为参考,底层的逻辑理解透了,才是重点。
而代码已经是删减掉了,留下一些配置的Json内容,作为你跟小龙虾交流时的参考语料,有时候你无法用自然语言描述清楚的,可以发过去。
不过小伙伴提的建议还是很到位的,现在小龙虾只要你接入的模型不是太差的情况下,你只需要表达清楚要求,基本都能帮你完成对应的设置。
拿我们今天要了解的定时任务跟心跳机制来说,你跟小龙虾讲,帮我设置一个定时任务,每天早上8点钟准时推送10条财经新闻给我。
咔咔一顿整,小龙虾就告诉你定时任务设置完毕了。完全不需要你去学什么定时任务的Cron表达式,更不需要你手动去修改OpenClaw.json配置文件。
因此接下来的内容老马也会省掉这些东西,直接阐述基本原理及应用场景,让大家不必了解多余的技术内容,省得烧脑绕晕自己。
但定时任务相关的OpenClaw命令还是要给大家贴出来的,主要是方便快速查询和删除,创建倒是无所谓,
定时任务
假设你是一个打工的牛马,那么定时任务就可以简单地理解成每天要干的事情+闹钟,即待办清单和一个定时提醒器。
专业术语叫Cron配置,我们可以不用去理解那些难懂的表达式怎么写。你只需要了解定时任务的底层逻辑即可。
定时任务会有一个调度器,负责查时间,触发到点的任务。一旦时间点到了,该去执行任务了,下一步就会触发调度器,调用小龙虾处理任务。
小龙虾收到任务后,开始思考并调用工具(比如查询新闻、检查股票等),完成任务后通过QQ或飞书等渠道通知到你。
这就是一个完整的定时任务运行流程,所以总结成一张图如下:
┌─────────────────────────────────────────────────────────┐│ OpenClaw Gateway ││ ││ ┌──────────────┐ ┌──────────────┐ ││ │ Cron Job │ │ Task │ ││ │ Scheduler │────▶│ Executor │ ││ │ (调度器) │ │ (执行器) │ ││ └──────────────┘ └──────┬───────┘ ││ │ ││ ┌────────────────────┼────────────────────┐ ││ │ │ │ ││ ┌──────▼───────┐ ┌──────▼───────┐ ┌─────▼──────┐││ │ AI 助手 │ │ 工具调用 │ │ 消息发送 │││ │ (思考) │ │ (执行) │ │ (通知) │││ └──────────────┘ └──────────────┘ └────────────┘││ │└─────────────────────────────────────────────────────────┘
定时任务其实很简单,它可以独立运行,一般存储在OpenClaw用户设置目录.openclaw\cron\jobs.json这样的路径下,属于单独的配置文件。
定时任务也会跟心跳机制打配合,心跳机制会给定时任务兜底唤醒。假设到点了,定时任务却没有准时运行,心跳机制就会再次去唤醒一下。
定时任务的时间颗粒度是可以设置得非常细的,一般精确到以分钟为单位,1分钟执行,5分钟执行,具体时间点执行,这些都是可以的。
不过设置具体时间点执行的话,就需要让小龙虾校准一下系统当前时间。本地龙虾通常会采用电脑系统的时间,正常来说不需要去校准。
但是云端龙虾因为是部署在云服务器上,云服务器有可能不在国内,像在美国、日本、新加坡啥的,就得校准一下时区,改成UTC+8北京时间。
定时任务可以应用的场景就非常多了,比如每天早上8点帮你搜集最新的财经新闻,发送财经日报到你的QQ或者飞书。
又或者一到周五,自动整理总结你这周的工作内容,帮你生成周报。当然,如果你有行情API的情况下,也可以设置定时任务去监控股票行情。
设置定时任务刚才说了,不需要你手动写Corn表达式,或者去生成什么Json配置文件,你只需像下面这样子跟小龙虾说一句话要求即可:
帮我设置一个定时任务,每天早上8点使用tavily-search技能搜索10条最新的AI新闻,整理后推送给我
至此你就完成了定时任务的设置,删除定时任务同样也是一句话的事情。你先跟小龙虾讲,把当前已经设置好的定时任务罗列出来发给我。
然后从列出来的定时任务中,选择你要删除的某个定时任务,告诉小龙虾把这个定时任务删除掉。新增或者删除定时任务,Gateway网关会在60秒后自动重载,无需重启。
但是要注意一点就是,如果Gateway网关挂掉了,就会影响定时任务的正常运行,导致定时任务失效。
虽然Gateway网关有自检机制,但还是建议你参考之前老马写过的文章,给它加个监控脚本:OpenClaw Gateway小白指南,拒绝小龙虾动不动就失联。
另外,定时任务取决于具体的要求情况,可能会去读取HEARTBEAT.md相关的说明文档,这个你大概作为了解即可。
心跳机制
心跳顾名思义,就跟人类的心跳差不多,但是它跳动的频率不会像人类心脏那么快,达到一分钟几十次甚至上百次的程度。
OpenClaw的心跳是系统内置的,同样会受Gateway网关的影响,网关挂掉了,心跳就停止了。
心跳机制是一种唤醒机制,起到类似于闹钟的作用,它本身并不会像定时任务那样子,真正去执行任务。
就好比你喜欢睡懒觉,经常导致上班迟到。心跳就像你老婆,早上7点钟看你没醒,跑过来叫醒你一次。
你看了一眼时间,发现还早,再睡个十分钟吧,倒头睡着了。早上8点钟,你老婆发现你还没醒,又跑过来叫醒你一次,结果你又倒头睡着了。
到了早上9点钟,你老婆又来叫醒你一次,你这时候看了一下时间,发现不好了要迟到了,才匆忙爬起来。
这个例子中,你老婆始终是那个动嘴不动手的角色,只负责叫醒你。从来不会一平底锅把你脑袋敲醒,或者一脚把你踹到床底下弄醒你。
也就是说,心跳机制是一种系统自动检查的行为,拿Gateway网关来说,网关可以用它来检查自己是否正常运行,检查渠道连接是否健康,检查内存和CPU使用率等等。
前面提到的,心跳机制可以配合定时任务一起干活。假设定时任务到点了没执行任务,心跳就跟老婆一样,过去喊一声,该起床上班了。
但是,心跳机制并非只会动嘴不会动手,如果配置了payload(要执行的任务内容),加上另外生成的脚本,也能够达到定时执行任务的效果。可以说,心跳机制跟定时任务之间的区别界限变得越来越模糊。
所以心跳机制的应用场景会跟定时任务存在一定的重合,到最后你可能就是把心跳机制纯粹地当成一种自动的定时检查机制。
比如设置30分钟检查一下某个定时任务是否运行正常,或者某一个自动化工作流是否运行正常,出现错误立马发送QQ通知,记录日志。
像这样的场景就是典型的,只不过心跳机制不要设置得太频繁,除非你要求的检查间隔时间比较短,否则时间间隔可以设置长一点。
以设置1分钟心跳一次和30分钟心跳一次为例,两者之间消耗的token相差30倍。每心跳一次,都会去唤醒一下小龙虾,然后加载上下文,查看任务清单,再去思考啥的,这都是在消耗token。
最后,心跳机制不一定是必须要设置的。除非你遇到了老马上面提到的检查提醒场景,大多数情况下,都可以用设置定时任务去替代。
定时任务常用命令
(1)定时任务命令
# 查看定时任务配置openclaw cron list# 创建定时任务openclaw cron create "0 9 * * *" "发送天气提醒"# 删除定时任务openclaw cron delete <task-id># 手动触发任务openclaw cron run <task-id>
(2)日志查看命令
# 查看 Gateway 日志openclaw logs --follow# 查看心跳日志Get-Content ~/.openclaw/heartbeat.log -Tail 50# 清理旧日志Get-ChildItem ~/.openclaw/*.log |Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |Remove-Item
好了,以上就是今天的分享,欢迎关注、点赞、转发一键三连。有任何问题和需求,请在评论区留言,回见!
对了,老马最近刚创建了一个AI学习交流群,有兴趣进群的小伙伴可以添加老马微信号:immajiabin,添加好友时备注:进群(不备注不通过)。

夜雨聆风