)
1. OpenClaw Cron Jobs 到底是什么适合谁用OpenClaw 的 Cron Jobs 是一套跑在 Gateway 网关内部的定时调度系统它和 Linux 系统自带的 crontab 不是一回事。你可以把它理解成「调度器 AI 执行器 消息投递系统」三合一到点唤醒 Agent让 Agent 带着完整推理能力去干活干完还能把结果推到飞书、钉钉、Telegram 这类渠道。适合谁已经装好 OpenClaw、想让 Agent 24 小时自动跑活的开发者尤其是做 SEO 监控、日报汇总、爬虫分析、内容生成这类重复性任务的人。我最初也以为openclaw cron就是给系统 cron 套了层壳直到有次任务死活不触发翻日志才发现它依赖 Gateway 常驻进程跟系统 crontab 完全两套机制。这个认知差是后面一堆坑的根源所以先把它讲透。核心结构就三个要素理解了这三个配置基本不会写错调度方式决定「什么时候跑」支持三种--at一次性执行、--cron周期性执行标准五段表达式、--interval间隔执行如30m。执行方式决定「在哪里跑」这是最容易踩坑的地方。--session main在主会话里跑相当于插一条系统消息适合提醒类轻任务--session isolated开独立 Agent 跑有完整推理能力、能投递结果适合自动化生产任务。Payload 决定「干什么」--system-event是轻量提醒不触发 AI--message是完整 AI 推理任务。一句话记住简单提醒用 main system-event复杂任务用 isolated message。生产环境务必加--announce和--channel否则任务跑了你也不知道结果。2. TaoToken 统一 Key 接入前置准备OpenClaw 的 Agent 任务要调用大模型模型来源和 Key 管理是绕不开的一环。我这边统一用 TaoToken 做接入层好处是一个 Key 管所有模型切换模型不用改一堆环境变量Cron 任务里也不用为每个任务单独配 Key。先说清楚 TaoToken 是什么它是一个大模型 API 聚合接入服务提供统一的 Base URL 和 API Key兼容 OpenAI 风格的接口协议。OpenClaw 里凡是需要填模型地址和密钥的地方都指向它就行。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。接入前你需要准备三样东西我称之为「三件套」缺一不可Base URLhttps://taotoken.net/apiAPI Key在控制台创建形如sk-开头的一串字符 Model ID你要调用的具体模型标识比如claude-sonnet-4-5这类获取 Key 的路径是登录后进控制台找到 API Keys 页面新建一个。这里有个细节Key 创建后只显示一次务必当场复制存好关掉页面就找不回来了。我吃过这个亏重新建了好几个 Key。拿到三件套后OpenClaw 侧的配置有两种方式。一种是写进全局配置文件让所有 Agent 任务共享另一种是在单个 Cron 任务的 payload 里指定。生产环境我建议走全局配置Cron 任务里只写业务逻辑避免每个任务重复填 Key。全局配置一般放在~/.openclaw/config.json模型相关字段大致长这样{ model: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-你的Key, modelId: claude-sonnet-4-5 }, cron: { enabled: true } }注意cron.enabled这个字段很多人任务不执行就是因为它被设成了 false或者压根没写。配置改完记得重启 Gateway不然不生效。如果你用的是 Claude Code 这类工具做辅助开发也可以在它的 settings 里配同一套三件套Base URL 填https://taotoken.net/apiKey 和 Model ID 保持一致这样开发调试和线上 Cron 用的是同一套模型通道排查问题时不至于两边对不上。3. 可复制的 Cron 配置片段与任务编排这一节直接给能抄的配置。先讲 CLI 方式再讲 JSON 方式最后讲任务编排的组合思路。最简单的验证任务一次性提醒用来确认整条链路通不通openclaw cron add \ --name 链路验证 \ --at 2026-04-01T10:00:00Z \ --session main \ --system-event 检查系统状态 \ --wake now \ --delete-after-run跑完用openclaw cron list能看到任务就说明注册成功。--delete-after-run让任务执行后自动删除适合一次性验证。生产级任务每天早九点跑 SEO 分析并推送到 Telegramopenclaw cron add \ --name 每日SEO分析 \ --cron 0 9 * * * \ --tz Asia/Shanghai \ --session isolated \ --message 分析今天的SEO机会并给出建议 \ --announce \ --channel telegram \ --to your_chat_id这里--tz一定要加不加就按服务器时区走服务器在 UTC 的话你的「早九点」实际是北京时间下午五点这个坑后面单独讲。JSON 方式更灵活适合用代码批量创建任务。CLI 本质就是包装 JSON所以两者字段是对应的{ name: Morning brief, schedule: { kind: cron, expr: 0 7 * * *, tz: Asia/Shanghai }, sessionTarget: isolated, payload: { kind: agentTurn, message: 总结最新动态并生成简报 }, announce: { channel: telegram, to: your_chat_id } }任务编排上我的经验是「一个任务只干一件事」。别把爬虫、分析、推送塞进同一个 message那样失败了你根本不知道是哪步挂了。拆成三个任务用时间错开爬虫任务 8:50 跑分析任务 9:00 跑推送任务 9:10 跑。前一个任务的输出落到文件后一个任务读文件这样每个环节可独立调试。存储位置要记牢任务定义在~/.openclaw/cron/jobs.json运行记录在~/.openclaw/cron/runs/。重启不丢也能拿来做审计。调试时直接看这两个地方比翻日志快。4. 验证请求与成功结果确认配置写完不算完得逐项验证。我习惯分三步走先验证模型通道再验证任务注册最后验证执行结果。第一步验证 TaoToken 通道是否通。用 curl 直接打一次 API确认 Key 和 Base URL 没问题curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 回复ok}] }返回里能看到choices数组和正常内容说明通道没问题。如果这里就报错先别碰 Cron把 Key 和 Model ID 对齐再说。第二步验证任务注册。openclaw cron list列出所有任务重点看三个字段name 对不对、schedule 表达式对不对、sessionTarget 是不是你想要的。我见过表达式写错一位导致任务永远不触发的情况0 9 * * *和0 9 * * 1差一个字符含义完全不同。第三步验证执行结果。不想等到点用强制运行调试openclaw cron run jobId --force跑完去~/.openclaw/cron/runs/看这次运行的记录文件里面有执行时间、状态、输出内容。如果配了--announce对应渠道应该收到消息。收到消息 全链路通。成功的结果长这样runs 目录下多一个带时间戳的文件内容里 status 是 successoutput 字段有你期望的分析结果Telegram 或钉钉里收到推送。三个都对上这个任务才算真正落地。5. 常见报错与踩坑排查这一节按真实报错来对照着查。任务完全不执行。先查配置开关cat ~/.openclaw/config.json | grep cron.enabled确认是 true。再查环境变量echo $OPENCLAW_SKIP_CRON这个变量如果被设了值所有 Cron 都会被跳过应该是空或未设置。很多人在这里翻车尤其是从别人那抄了环境变量配置的。Gateway 没运行。Cron 依赖 Gateway 常驻进程不是系统 cron。查状态openclaw gateway status或者ps aux | grep openclaw-gateway。进程不在任务自然不会触发。这个报错最隐蔽因为任务列表看着正常就是不跑。401 报错。模型通道鉴权失败八成是 Key 错了或过期。检查三件套Base URL 是不是https://taotoken.net/apiKey 有没有多余空格Model ID 是不是当前 Key 有权限调用的。重新在控制台建个 Key 换上试试。local proxy failed。本地代理配置问题通常是 Base URL 写成了带路径的完整地址或者网络层有拦截。确认 Base URL 只写到/api不要自己拼/v1/chat/completions。reading choices 报错。返回体里没有 choices 字段说明请求根本没到模型层或者返回的是错误结构。先看完整返回内容多半是鉴权或参数问题对照 401 那条排查。OAuth 相关报错。如果你用的是 Claude Code 那套 OAuth 流程注意它和 API Key 是两套鉴权。Cron 任务里统一用 API Key别混用 OAuth token混用会报鉴权冲突。时区问题。任务执行时间和你预期差好几个小时就是没加--tz。默认走服务器时区服务器在 UTC 的话北京时间要减 8 小时。加--tz Asia/Shanghai解决。任务跑了但没输出。三个检查点有没有加--announcechannel 配没配对to 参数格式对不对。Telegram 的 chat_id 是数字钉钉是另一套格式填错就静默失败。成本爆炸。这是真实踩过的坑有次任务每 10 分钟跑一次工具卡住导致每次都重新调 AI一天烧掉不少额度。解决方案加前置判断不需要 AI 的场景直接跳过控制频率别设太高非复杂任务换轻量模型。Cron 表达式写*/10 * * * *之前先想清楚这个任务真的需要这么频繁吗。6. 长期运行建议与接入入口跑通单个任务只是开始长期稳定运行还得注意几件事。任务拆分要彻底一个任务一个职责失败时能快速定位。日志要定期看~/.openclaw/cron/runs/目录会越积越多写个清理任务定期归档。频率要克制能用每小时解决的别用每十分钟成本和时间都省。模型选择要分层复杂分析用强模型简单汇总用轻量模型通过 TaoToken 切换 Model ID 就行不用改架构。如果你还没配好 Key先去控制台创建https://taotoken.net/console 。三件套里的 Base URL 固定是https://taotoken.net/apiModel ID 按你实际要用的填。接入文档在 https://taotoken.net/doc 里面有各语言的调用示例。想先验证模型通不通用模型对话页面直接试https://taotoken.net/model-chat 。长期跑编码和 Agent 类任务的话Coding Plan 更划算https://taotoken.net/coding-plan 。我现在的做法是所有 Cron 任务的模型通道统一走 TaoTokenKey 只维护一个换模型只改 Model ID 一个字段。任务定义全部走 JSON 文件版本管理改动用 git 记录出问题能回滚。这套跑了大半年除了自己手滑改错表达式没出过系统性故障。