为什么要用定时任务?

很多运营工作是重复的:每天发日报、每周检查死链、每月清理过期数据、每隔几小时刷新缓存。这些事情不难,但每次都要人工触发就很烦。
OpenClaw 内置了定时任务系统(Cron),可以让 AI 按照你设定的时间自动执行工作。设置一次,之后就是全自动。
这篇教程从最简单的一次性提醒开始,一步步教你掌握 OpenClaw 的定时任务功能。
三种调度类型
OpenClaw 支持三种时间调度方式,覆盖不同场景:
at——一次性任务
到了指定时间执行一次,执行完自动删除。适合提醒、倒计时类任务。
# 20 分钟后提醒我检查文档
openclaw cron add \
--name "检查文档提醒" \
--at "20m" \
--session main \
--system-event "提醒:去检查一下文档发布情况" \
--delete-after-run
every——固定间隔
每隔固定时间执行一次,不关心具体几点。适合轮询、心跳类任务。
# 每 6 小时检查一次网站是否正常
openclaw cron add \
--name "网站健康检查" \
--every "6h" \
--session isolated \
--agent-turn "检查 361sale.com 是否正常访问,如果有异常立即告警"
cron——标准表达式
最灵活的方式,用 5 位 cron 表达式精确控制执行时间。适合”每天早上 9 点””每周一上午 10 点”这种精确需求。
# 每天早上 9 点生成日报
openclaw cron add \
--name "每日日报" \
--cron "0 9 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--agent-turn "生成昨天的运营数据摘要"
cron 表达式格式:分 时 日 月 周。常用示例:
0 9 * * *→ 每天 9:000 9 * * 1→ 每周一 9:000 */6 * * *→ 每 6 小时整点30 8 1 * *→ 每月 1 号 8:30
创建一次性提醒
最简单的用法——设置一个定时提醒:
openclaw cron add \
--name "会议提醒" \
--at "2026-05-20T14:00:00+08:00" \
--session main \
--system-event "提醒:14:00 有产品评审会议" \
--wake now \
--delete-after-run
参数解释:
--at:具体时间点(ISO 8601 格式),不带时区按 UTC 算--session main:在主会话中执行(你会在当前对话里看到提醒)--system-event:提醒内容--wake now:立即唤醒会话处理这个事件--delete-after-run:执行完自动删除这个 job
也支持相对时间:--at "30m"(30 分钟后)、--at "2h"(2 小时后)。
创建每日重复任务
比如每天早上 9 点让 AI 检查网站收录情况:
openclaw cron add \
--name "每日收录检查" \
--cron "0 9 * * *" \
--tz "Europe/Berlin" \
--session isolated \
--agent-turn "检查 361sale.com 在 Google 的最新收录情况,列出昨天新收录的页面和未收录的页面。"
用 --tz 指定时区很重要。如果你在柏林,用 Europe/Berlin;在上海,用 Asia/Shanghai。不设时区默认按服务器本地时区。
配置执行方式

OpenClaw 的 cron job 有四种执行方式:
- main:在你的主对话会话中执行。适合提醒类任务,你会直接在对话里看到结果。只能用 system-event 类型。
- isolated(推荐):在独立的临时会话中执行。不会干扰你的主对话,执行完会话自动清理。
- current:绑定到创建时的当前会话。适合需要上下文的重复任务。
- session:自定义ID:在一个持久化的命名会话中执行。适合需要积累历史的工作流。
大部分场景用 isolated 就够了。只有需要 AI 记住上次执行结果时,才用 session:xxx。
配置 Delivery 推送结果
执行完之后,你可能想把结果推送到某个地方:
openclaw cron add \
--name "周报生成" \
--cron "0 10 * * 1" \
--tz "Asia/Shanghai" \
--session isolated \
--agent-turn "生成上周的 SEO 周报,包括流量趋势、排名变化、新增收录。" \
--delivery announce \
--delivery-channel telegram \
--delivery-to "-100123456789"
delivery 支持三种模式:
- announce:推送到聊天渠道
- webhook:POST 到指定 URL
- none:不推送,只在任务记录里留痕
管理定时任务
创建完 job 后,日常管理用这几个命令:
# 列出所有 job
openclaw cron list
# 查看某个 job 详情
openclaw cron get <job-id>
# 查看执行历史
openclaw cron runs --id <job-id>
# 手动触发一次(测试用)
openclaw cron run <job-id>
# 暂停一个 job(不删除)
openclaw cron update <job-id> --enabled false
# 恢复
openclaw cron update <job-id> --enabled true
# 删除
openclaw cron remove <job-id>
建议每次创建新 job 后,先用 openclaw cron run 手动触发一次,确认执行正常再等自动调度。
用 JSON5 文件管理复杂任务
如果你的任务配置比较复杂,用命令行参数写起来太长,可以写成 JSON5 文件:
// daily-seo-check.json5
{
name: "每日 SEO 巡检",
schedule: {
kind: "cron",
expr: "0 8 * * *",
tz: "Europe/Berlin"
},
payload: {
kind: "agentTurn",
message: "执行每日 SEO 巡检:1) 检查网站是否正常访问;2) 检查昨天发布的文章是否被收录;3) 检查是否有 5xx 错误;4) 检查核心关键词排名变化。输出简洁报告。",
timeoutSeconds: 180
},
delivery: {
mode: "announce",
channel: "telegram",
to: "-100123456789"
},
sessionTarget: "isolated"
}
然后一行命令导入:
openclaw cron add --file daily-seo-check.json5
常见问题
Q1:cron 表达式写错了怎么办?
用 openclaw cron update <job-id> --cron "新表达式" 修改。或者直接编辑 ~/.openclaw/cron/jobs.json 文件,Gateway 会自动检测变化。
Q2:Gateway 重启后定时任务会丢失吗?
不会。所有 job 持久化在 ~/.openclaw/cron/jobs.json,重启后自动恢复。运行状态在 jobs-state.json 里。
Q3:任务执行超时怎么办?
在 payload 里设置 timeoutSeconds。默认值可能不够复杂任务使用,建议设 120-300 秒。超时后任务会被标记为 timed_out。
Q4:怎么知道任务有没有正常执行?
用 openclaw cron runs --id <job-id> 查看历史。每次执行都有状态记录:succeeded、failed、timed_out。也可以用 openclaw tasks audit 做整体健康检查。
Q5:能不能设置任务失败后自动告警?
可以。在 job 配置里加 failureAlert 字段,指定连续失败几次后告警、告警发到哪里。
Q6:isolated 会话执行完后数据还在吗?
执行记录保留 7 天,之后自动清理。如果你需要长期保留执行结果,用 delivery 推送到外部渠道,或者用 session:xxx 模式让 AI 在持久会话里积累历史。
相关教程推荐
- OpenClaw 怎么做内容排期?把关键词研究变成可执行的发布计划
- OpenClaw 怎么做数据分析日报?每天 5 分钟掌握网站运营状态
- OpenClaw 怎么做 SEO 关键词研究?从找词、分类到内容规划的实操教程
总结
OpenClaw 的定时任务功能让你把所有重复性工作自动化:一次性提醒用 at,固定间隔用 every,精确时间用 cron 表达式。配合 delivery 推送,执行结果自动发到你的群里。
核心就是:选对调度类型 → 写好 AI 指令 → 配好推送 → 测试一次确认正常。之后就是全自动。
更多定时任务高级用法,参考官方文档:OpenClaw Scheduled Tasks 文档。
官方文档:OpenClaw 定时任务配置文档
| 联系我们 | |
|---|---|
| 教程看不懂?联系我们为您免费解答!免费助力个人,小企站点! |
客服微信
|
| ① 电话:020-2206-9892 | |
| ② QQ咨询:1025174874 | |
| ③ 邮件:[email protected] | |
| ④ 工作时间:周一至周五,9:30-18:30,节假日休息 | |













3月11日 13:490
现在肯定还是做SEO的,只是玩法变了。 以前靠堆内容、堆关键词就能有流量,现在更看重 内容质量 + 品牌信任 + 用户体验。 另外单靠SEO其实越来越难,很多做得好的基本都是 SEO + 社媒 + 内容营销 + 私域转化 一起做。 SEO本质还是一个长期获客渠道,但不能再当成唯一渠道了。嘻嘻在干活
3月11日 10:540
正常,收录只代表 Google 看到了页面,不代表马上给排名,“已收录但没排名”通常是因为: 关键词竞争大、页面权重低、内容不够强、页面还比较新。 先继续优化长尾关键词、内容质量和内链,通常需要一点时间,排名会慢慢出来Amelia Foster 3月6日 16:200
有截图吗子非鱼也安知鱼之乐 3月6日 09:230
别先堆优化插件,先定位瓶颈: 用 Query Monitor 看慢 SQL、慢 Hook。 暂停全部插件做对比,再逐个开启。 检查 autoload 过大(options 表)。 检查数据库索引与大表查询。 服务器 TTFB 高就先处理主机/数据库性能。嘻嘻在干活
3月3日 16:470
你好风之旅,其实真不用搞复杂的本地环境,普通人按这几步来,更新基本不会崩站👇 先备份全站,文件 + 数据库都备一下,这是底线,出问题能一键回退。 更的时候别一键全更,分批更,先更不重要的插件,再更核心的。 更新完立刻清缓存,去前台检查首页、文章页、按钮、表单这些关键位置。 最好再装个支持版本回滚的插件,万一崩了,一秒切回旧版。 总结来说:先备份、分批更、更完查、留退路,稳得很✅😎希望能帮到你bugbang 3月2日 09:550
通常不是支付没成功,而是回调(webhook)没把订单状态写回来。 排查步骤: WooCommerce → 状态 → 日志:看支付网关是否有 webhook error / signature error / timeout 检查站点是否被 WAF 拦截(Cloudflare、宝塔防火墙、安全插件) 检查是否启用了“缓存结账页/接口路径”(结账页和回调接口不应缓存) 看服务器错误日志是否有 500/致命错误导致回调执行中断 解决方案: 放行 wp-json、wc-api、支付网关回调 URL(按网关文档配置) 关闭结账页的缓存与 JS 合并压缩测试一次 若使用 Cloudflare:为回调 URL 设置 不挑战、不拦截 的规则乌拉那拉甄嬛 1月31日 09:360
1) 先判断这是“正常等待”还是“异常卡住” 可以先看 3 个信号:页面发布时间是否在 7–14 天以内、是否 只有少量页面 出现该状态、页面是否已经出现在 XML Sitemap 中。 如果三个都满足,多半属于正常爬取与评估阶段,不需要立刻动手。 2) 什么情况下“等”是没用的? 以下情况基本不会靠时间自动解决:页面几乎没有内链(孤立页)、内容与站内已有页面高度相似、canonical 指向了别的 URL、同一主题短时间发布太多相似文章。 这种情况下,Google 已经抓取,但判断“当前不值得进入索引”。 3) 最有效的人工干预方式(不折腾) 优先做这 3 件事:加内链、从相关旧文章或栏目页链接到该页面、增强首屏信息密度 前 2–3 段直接回答用户问题,避免铺垫太多,确认 canonical 为自指,避免被判定为重复页,做完再去 GSC 请求重新编入索引即可。 4) 什么“干预动作”反而容易适得其反? 不太推荐:频繁删除重发、连续多次点“请求编入索引”、为了收录强行堆关键词、随意改 URL 或标题 这些操作会让 Google 重新评估页面稳定性,反而拖慢收录。 5) 一个实用判断标准 如果一篇文章:已被抓取、没有 noindex / robots 问题、有至少 1–2 条相关内链、内容明显解决了一个独立问题,那它 是否被收录,只是时间问题,不是插件问题。帖子搬运工 1月30日 10:000
新站前期不做外链完全可以,先把内容和站内结构做好更稳。只靠内容一般能拿到收录和部分长尾词排名,但中高竞争词起量会慢。建议等网站稳定收录、有30–50篇质量内容、关键词开始进前20/30后,再少量做外链,优先品牌词/裸链/引用型,别一上来追数量。👍