OpenClaw 在聊天中回复消息时很有趣。而当它能在恰当的时间自动发送恰当的消息时,就更加实用了。这正是内置 cron 调度器的作用所在。它运行在 Gateway 进程中,因此无需单独的任务运行器,并且可以将结果直接发送回 Telegram、WhatsApp、Slack、Discord 等平台。

人们一听到“cron”就想到“Linux crontab”。虽然概念相似,但目标不同。这不仅仅是“早上7点运行一个脚本”,而是“唤醒代理,运行提示符或将系统事件发送到主会话,然后将输出发送到我实际能看到的地方”。

如果您已经使用 Webhook 从 GitHub、Stripe 或 n8n 触发运行,您可以将 cron 看作是同一工具箱的另一半。Webhook 是事件驱动的,而 cron 是时间驱动的。它们的执行机制看起来类似。如果您想详细了解 Webhook,请参阅OpenClaw Webhook 详解

OpenClaw cron 调度器实际执行的操作

OpenClaw cron 是 Gateway 内部的一个调度器。您可以创建任务,Gateway 会在任务到期时将其唤醒。任务会持久化到磁盘,因此重启不会清除您的调度。每次运行还可以写入一个简短的运行记录,以便您在出现故障时查看具体原因。

启用 cron 后,你可以用它来处理那些通常需要用随机脚本拼凑在一起的任务:

  • 每日简报会在固定时间发送到您的手机上
  • 20分钟后触发的一次性提醒
  • 每周一次的“深度回顾”提示,采用更强大的模型,无需修改您的主聊天记录。
  • 监控循环,例如“每 6 小时检查一次价格,仅在价格发生重大变化时发出警报”

是的,它可以将结果发送到多个渠道。您可以根据需要,将同一任务的输出同时发送到私密的 Telegram 聊天群和 Slack 频道。不过,除非您想被团队成员屏蔽,否则不要对那些会产生大量噪音的任务这样做。

克朗与心跳

OpenClaw 还有一种叫做心跳机制的调度机制。人们常常把这两种机制混淆,然后疑惑为什么代币成本会飙升,或者为什么任务感觉“延迟”了。其实,清晰的理解模型很简单。

心跳是主会话中的周期性扫描。

Heartbeat 会按固定间隔运行,并从文件(通常命名为 `.cd` HEARTBEAT.md)中读取检查清单。它用于日常事务管理,例如“扫描收件箱查看紧急邮件”或“查看未来两小时的日程安排”。它会将多个检查项目集中到一个代理的轮班中,如果您严格按照检查清单执行,就能有效控制成本。

心跳机制适用于“大约每 30 分钟”而不是“准时 9:00”执行的任务。它也适用于那些受益于主会话上下文的任务,例如正在进行的项目和之前的决策。

Cron 用于精确计时和独立运行

Cron 适用于需要精确定时执行的任务,或者您希望将其从主要对话历史记录中排除的任务。例如,每天早上 9 点运行的每日报告就是一个显而易见的例子。另一个例子是每周回顾,它会在一个独立的会话中运行,并且只会将最终结果返回给您。

大多数配置方案都会同时使用这两种机制。Heartbeat 负责处理周期性的后台检查,而 cron 则负责“在特定时间”和“单独运行此作业”。

定时任务是如何存储的,以及这为什么重要

OpenClaw 将 cron 作业定义保存在磁盘上,并单独保存每次运行的历史记录。这种持久性正是 cron 在 VPS 上良好运行的原因。即使服务器重启,您的计划任务仍然存在。

它还意味着两件实际的事情:

  • 如果网关没有运行,那么 cron 也不会运行,因为它位于网关内部。
  • 如果你在一台会进入睡眠模式的笔记本电脑上测试作业,你会错过进度安排。

如果你想确保 cron 任务的可靠性,请使用始终在线的主机。这也是 VPS 部署方式流行的原因之一。OpenClaw现已推出的 VPS 托管指南解释了基本概念,而不会让你陷入繁琐的设置细节中。

三种日程安排类型

OpenClaw cron 支持三种调度模式,您可以根据要创建的任务进行选择。我将展示一些 CLI 示例,因为它们更具体。如果您更喜欢聊天驱动的设置,也可以直接告诉客服您的需求,客服可以为您创建任务。

一次性调度

可以使用此功能设置“20分钟后提醒我”或“在UTC时间16:00运行一次”。它只会执行一次,运行后通常会自动删除。

openclaw cron add \
  --name "Call back reminder" \
  --at "20m" \
  --session main \
  --system-event "Reminder: call the client back." \
  --wake now \
  --delete-after-run

一次性任务也非常适合用作个人提醒,因为它们不会占用你的永久任务清单空间。创建之后就可以不用管了。

间隔调度与每个

此功能适用于“每 4 小时”或“每 30 分钟”执行一次的任务,这类任务对时间精确度要求不高,只需保持稳定的时间间隔即可。

openclaw cron add \
  --name "Price check" \
  --every "6h" \
  --session isolated \
  --message "Check monitored product prices. Alert me only on meaningful drops." \
  --announce \
  --channel telegram \
  --to "123456789"

如果你频繁地进行检查,比如每 10 分钟一次,你应该暂停一下,问问自己心跳机制是否能更好地批量处理这些检查。如果每次运行都占用一个完整的代理回合,那么高频的 cron 任务运行很快就会变得非常耗费资源。

使用 cron 的 cron 表达式

如果您希望“每个工作日早上 7:00”或“每周一早上 9:00”运行,请使用此功能。您需要提供一个 cron 表达式,还可以选择指定时区。

openclaw cron add \
  --name "Morning brief" \
  --cron "0 7 * * 1-5" \
  --tz "Europe/Bucharest" \
  --session isolated \
  --message "Send my morning brief. Calendar first then inbox highlights then any blockers." \
  --announce \
  --channel whatsapp \
  --to "+15551234567"

如果您对 cron 表达式感到生疏,以下是一些常用的快速模式:

  • 0 7 * * *每天早上 7:00
  • 0 9 * * 1每周一上午 9:00
  • 0 7 * * 1-5工作日早上 7:00
  • 0 6 1 * *每月第一天早上6点
  • 0 * * * *每小时

如果您需要了解 cron 表达式语法,维基百科页面可以作为快速复习的参考。Cron表达式概述

主会话作业与独立作业

这个决定将改变你身体的感受。

主会话模式

主会话定时任务会将系统事件发送到主会话中,然后代理会使用完整的上下文信息处理该事件。这对于依赖于持续上下文的任务非常有用,例如“继续执行我们正在执行的操作清单”或“跟进供应商的讨论”。

如果主会话任务被设计成在心跳机制内处理,那么它们的运行成本也会更低。在这种模式下,cron 只是放置一个定时任务,而心跳机制则负责处理它。

主会话作业使用系统事件有效负载创建:

openclaw cron add \
  --name "Expense reminder" \
  --at "2026-02-01T16:00:00Z" \
  --session main \
  --system-event "Reminder: submit the expense report." \
  --wake now \
  --delete-after-run

缺点之一是,主会议任务可能会打断正在进行的对话。如果安排的任务过多,主会议就会变成通知推送。

隔离会话模式

独立任务会运行一个专用的代理,并在其自身的会话中完成。它不会干扰您的主对话。这种方式简洁明了,对于监控和摘要等会产生大量噪音的任务来说也更安全,因为您的主会话仍然保持可读性。

创建隔离作业时会附带消息负载:

openclaw cron add \
  --name "Weekly review" \
  --cron "0 9 * * 1" \
  --tz "Europe/Bucharest" \
  --session isolated \
  --message "Weekly review: open PRs, merged PRs, CI failures, open issues and blockers." \
  --announce \
  --channel slack \
  --to "channel:C1234567890"

单独运行还能揭示一个实用的成本控制技巧:你可以使用成本较低的模型进行日常总结,而将成本较高的模型用于每周一次的深度回顾。模型选择至关重要,OpenClaw 中 Claude 与 OpenAI 模型选择的比较对此进行了详细阐述。

配送选项和目标受众

定时任务可以运行但不执行任何可见的操作,也可以向某个通道输出结果。正确的默认行为取决于任务的具体情况。总是产生有用输出的任务应该输出结果。而偶尔产生信号的任务可能只在产生信号时才输出结果。

向消息渠道发布送达通知

公告的意思是“把结果发给我”。您可以选择渠道和收件人。不同平台的目标受众有所不同。

  • Telegram 通常使用数字聊天 ID
  • WhatsApp 和 Signal 使用 E.164 号码,例如+15551234567
  • Slack 和 Discord 使用频道或用户标识符,例如channel:...user:...

如果您已经在多个通道上运行 OpenClaw,并且想要保持设置整洁,多通道设置指南可以帮助您避免常见的“为什么它在错误的地方回复”的困惑。

Webhook 传递

有些人希望将 cron 任务的输出发送到另一个系统,而不是聊天窗口。例如:一个每晚导出的数据,并将其发布到内部 API。在这种情况下,使用 webhook 发送数据是更简洁的方式。任务完成后,会将一个 JSON 数据包发送到你的 API 端点。

即使使用 webhook 发送请求,也应该将其视为真正的集成,并进行身份验证和重试机制。webhook 的安全加固建议与其他任何外部触发系统相同。

未送达

有时,您希望 cron 执行一些纯粹的内部工作,例如刷新本地缓存或运行维护分析,而这些分析仅在需要时才需要检查。在这种模式下,您需要关闭任务分发,并在调试时依赖运行历史记录。

计划作业的模型和思维模式覆盖

计划性工作有一种奇怪的失效模式:你忘了它的存在,然后突然发现账单来了。最简单的控制方法是为例行工作设定较低的收费模式,而将“高投入”的收费模式保留给不常进行的作业。

孤立的工作岗位是进行这种活动的理想场所。例如:

openclaw cron add \
  --name "Deep analysis" \
  --cron "0 6 * * 1" \
  --tz "Europe/Bucharest" \
  --session isolated \
  --message "Weekly deep analysis of project progress and risks." \
  --model "opus" \
  --thinking high \
  --announce \
  --channel telegram \
  --to "123456789"

如果你还运行代理来进行模型路由和成本控制,那又能节省一部分成本,但不要一开始就把事情搞得太复杂。先确保一个作业运行正常。

通过聊天创建定时任务

如果您不想操作命令行界面 (CLI),完全可以不用。您可以向您的客服人员咨询类似以下的问题:

“创建一个每日定时任务,在世界协调时早上 7 点执行。汇总我今天的日程安排,并突出显示紧急邮件。将其发送到这个 Telegram 群组。”

代理可以将这些信息转换为 cron 计划任务、独立的消息有效负载以及目标投递策略。当时间或时区不明确时,它应该询问而不是猜测。如果不询问,最终你会在早上 7 点收到一条时区错误的消息,然后你会因为错误的原因讨厌 cron。

真实工作模式示例

晨间简报(无垃圾邮件)

一份好的晨间简报应该简短精炼,重点突出,不宜罗列整个日程安排,也不宜概括所有新闻简报。一份实用的晨间简报会询问“哪些事情最重要”,并明确限定内容范围。

openclaw cron add \
  --name "Morning briefing" \
  --cron "0 7 * * *" \
  --tz "Europe/Bucharest" \
  --session isolated \
  --message "Morning briefing. List today’s calendar items with times. Then list urgent emails only. End with 2 or 4 suggested actions." \
  --announce \
  --channel telegram \
  --to "123456789"

如果您的简报包含电子邮件和日历数据,您需要先正确设置这些集成。相关指南包括OpenClaw Gmail 集成和电子邮件自动化以及OpenClaw Google 日历集成

每周回顾采用更强大的模型

这就是“定时AI”的优势所在。每周一坐下来冷静地进行审查是很困难的,而Cron则不会。

openclaw cron add \
  --name "Weekly review" \
  --cron "0 9 * * 1" \
  --tz "Europe/Bucharest" \
  --session isolated \
  --message "Weekly review. Summarize progress. List blockers. Mention open PRs and failed CI runs. Suggest next steps." \
  --model "opus" \
  --thinking high \
  --announce \
  --channel slack \
  --to "channel:C1234567890"

如果您希望此审核包含 GitHub 上下文,可以先集成 GitHub。OpenClaw GitHub 自动化 PR 审核和 CI 监控指南展示了常见的设置模式。

在主会话中弹出的一次性提醒

在主会场中使用一次性提醒是最稳妥的做法,因为它们就像“定时笔记”一样。它们不需要单独安排会场,也不需要花哨的提示。保持它们简单易懂即可。

openclaw cron add \
  --name "Standup reminder" \
  --at "20m" \
  --session main \
  --system-event "Reminder: standup starts in 10 minutes." \
  --wake now \
  --delete-after-run

抓取和监控任务

Cron 非常适合用于数据抓取和监控,因为您只需要在数据发生变化时进行重复检查和发出警报。大多数人会将其作为一项独立的任务,查询历史值存储,然后决定是否需要发出警报。

如果您使用 OpenClaw 进行网页抓取,则专用的网页抓取指南是使用 OpenClaw 进行网页抓取

你会经常用到CLI管理命令。

当你同时做两份以上的工作时,就需要注意基本的个人卫生。以下是人们实际会用到的指令:

  • openclaw cron list查看所有职位
  • openclaw cron run <jobId>立即测试工作
  • openclaw cron edit <jobId>更改日程提示模型或目标
  • openclaw cron pause <jobId>openclaw cron resume <jobId>你需要休息的时候
  • openclaw cron remove <jobId>当一份工作不再有用时

别忽略“运行”或历史记录。作业失败时,除非你查看,否则它不会发出任何声音。运行历史记录能让你无需猜测就能知道“它是否执行了”。

作业不触发时的故障排除

网关未运行

Cron 进程在 Gateway 内部运行。如果该进程宕机,所有任务都将无法运行。这是计划任务“失效”的最常见原因。在服务器上,您应该使用 systemd 管理 OpenClaw,以便它在系统启动时自动重启并运行。关于如何在 VPS 上安全托管 OpenClaw 的指南也涵盖了通常会导致停机的运维环节。

时区混乱

如果您的日程安排使用了时区参数,请确认其符合您的预期。如果您未指定时区,则默认使用主机时区。这在个人电脑上没问题,但在您部署在某个随机区域后就忘记管理的 VPS 上就非常麻烦了。

任务运行了,但你从未看到任何输出。

这几乎总是投放目标的问题。作业已运行并写入运行记录,但未向任何频道发布内容,或者向你不再关注的目标发布了内容。

聊天功能要正常运作,需要满足以下三个条件:

  • 渠道整合运行正常
  • 目标to正确
  • 这项工作旨在宣布或交付成果。

关于 Telegram 和 Discord 的设置详情,频道文档会很有帮助。如果 Telegram 和 Discord 是你的主要连接点,请尝试通过 BotFather 将 OpenClaw 连接到 Telegram,并将OpenClaw 连接到 Discord 。

当 cron 不足以满足需求,而您需要工作流时

Cron 的作用是“一次启动一个任务”,它本身并不是工作流引擎。如果你的任务需要多步骤的工具调用、审批以及暂停/恢复模式,那么你需要一个工作流运行时环境。在 OpenClaw 技术栈中,Lobster 通常扮演着这样的角色:Cron 决定任务何时运行,而 Lobster 则决定执行哪些步骤以及哪些步骤需要审批。

大多数人只有在开始进行真正的运营自动化操作时才需要它,例如“抓取价格、更新表格、创建 GitHub issue、等待批准、发送电子邮件”。如果你还停留在“每天早上 7 点发送简报”的阶段,那么 cron 就足够了。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐