【OpenClaw:实战部署】10、OpenClaw自动化调度——打造7x24小时无人值守AI工作流

【Cron定时任务】OpenClaw自动化调度------打造7x24小时无人值守AI工作流

从"被动响应"到"主动服务",让AI成为永不掉线的数字员工

引言:为什么需要主动式AI?

大多数AI助手都是"被动响应式"的:你问它答,你指令它执行。但在真实的生产环境中,我们更需要主动式AI------它能在指定时间自动执行任务,定期检查系统状态,甚至根据事件触发复杂工作流。

试想以下场景:

  • 每天早上8点,自动汇总财经新闻推送到手机
  • 每小时检查服务器负载,超过阈值立即告警
  • 每当代码仓库有新的Pull Request,自动运行代码审查

这些场景的共同点在于:AI需要在没有用户直接指令的情况下,按照预定计划主动工作。这正是OpenClaw Cron定时任务的核心价值所在。

OpenClaw的Cron子系统将Unix传统工具cron与AI智能体的能力完美结合,让开发者可以用自然语言定义任务,用AI执行复杂逻辑,最终实现7×24小时无人值守的自动化工作流。

本文将深入解析OpenClaw Cron的设计原理、配置方法,并通过两个完整实战案例,带你掌握如何打造永不掉线的AI数字员工。

一、Cron任务基础:存储、调度与命令

1.1 存储路径与配置格式

OpenClaw的所有定时任务存储在 ~/.openclaw/cron/ 目录下。每个任务可以是一个独立的JSON或YAML文件,OpenClaw启动时会扫描该目录加载所有任务。

bash 复制代码
~/.openclaw/cron/
├── daily-briefing.yaml      # 每日晨报任务
├── server-monitor.yaml      # 服务器监控任务
├── backup-task.yaml         # 备份任务
└── triggered/               # WebHook触发任务存放目录

任务文件的基本结构(YAML示例):

yaml 复制代码
# daily-briefing.yaml
name: 每日财经晨报
description: 每天早上8点抓取财经RSS,生成摘要并推送至微信
schedule: "0 8 * * *"        # Cron表达式
type: cron                    # cron / at / interval
enabled: true

skill: rss-summary            # 要调用的Skill名称
params:                       # Skill参数
  feeds:
    - https://feed1.com/rss
    - https://feed2.com/rss
  output: wechat

retry:
  max_attempts: 3              # 失败重试3次
  backoff: 60                  # 间隔60秒重试

notify:
  on_success: false            # 成功不通知
  on_failure: true             # 失败通知
  channel: dingtalk            # 通过钉钉通知

1.2 调度类型

OpenClaw支持三种调度模式:

  1. Cron表达式:最灵活的定时方式,支持标准的5位或6位Cron格式(分 时 日 月 周)
  2. 间隔任务 :每隔固定时间执行,如 every 30 minutes
  3. 一次性任务 :在指定时间执行一次,如 at 2026-03-15 14:00

调度类型
Cron表达式

0 8 * * *
间隔任务

every 30 minutes
一次性任务

at 2026-03-15 14:00
每日8点
每30分钟
指定时间执行一次
任务调度器
执行Skill

1.3 核心命令

OpenClaw提供了便捷的CLI命令管理Cron任务:

bash 复制代码
# 添加每日8点晨报任务
openclaw cron add \
  --name daily-briefing \
  --schedule "0 8 * * *" \
  --skill rss-summary \
  --params '{"feeds":["https://feed1.com"],"output":"wechat"}'

# 查看任务列表
openclaw cron list
# 输出示例:
# ID        名称            调度          下次执行             状态
# task_001  每日晨报       0 8 * * *    2026-03-16 08:00    active
# task_002  服务器监控     0 * * * *    2026-03-15 15:00    active

# 暂停任务
openclaw cron pause task_001

# 恢复任务
openclaw cron resume task_001

# 删除任务
openclaw cron remove task_002

# 立即执行一次(测试)
openclaw cron run task_001

二、实战案例1:每日财经情报汇总

这个案例中,我们将构建一个每日自动运行的财经情报机器人,它会在每天早上8点抓取指定RSS源,用AI生成摘要,并通过微信推送给用户。

2.1 任务逻辑设计



异常处理
重试次数<3
重试次数=3
抓取失败
重试计数器
等待60秒后重试
发送失败告警
每日8点触发
抓取RSS源列表
解析RSS获取最新文章
文章数量>0?
调用LLM生成摘要
记录"无更新"
格式化消息
通过微信渠道推送
结束

2.2 开发RSS摘要Skill

首先,我们需要一个能处理RSS抓取和摘要生成的Skill。创建文件 ~/.openclaw/skills/rss-summary/index.ts

typescript 复制代码
import Parser from 'rss-parser';
import { LLM } from 'openclaw-sdk';

interface Params {
  feeds: string[];          // RSS源列表
  output: 'wechat' | 'dingtalk' | 'console';
  maxItems?: number;        // 每个源最多取多少条,默认5
}

export async function handler(params: Params) {
  const parser = new Parser();
  const allItems = [];
  
  // 1. 抓取所有RSS源
  for (const feedUrl of params.feeds) {
    try {
      const feed = await parser.parseURL(feedUrl);
      const items = feed.items.slice(0, params.maxItems || 5).map(item => ({
        title: item.title,
        link: item.link,
        contentSnippet: item.contentSnippet?.slice(0, 200) + '...',
        pubDate: item.pubDate
      }));
      allItems.push(...items);
    } catch (error) {
      console.error(`抓取失败: ${feedUrl}`, error);
      throw new Error(`RSS抓取失败: ${feedUrl}`);
    }
  }
  
  // 2. 如果没有新文章,返回提示
  if (allItems.length === 0) {
    return {
      code: 0,
      data: '今日暂无财经更新'
    };
  }
  
  // 3. 调用LLM生成摘要
  const llm = new LLM();
  const prompt = `请将以下财经新闻整理成一份简洁的晨报摘要(200字以内),包含核心要点和可能的投资影响:\n${JSON.stringify(allItems, null, 2)}`;
  const summary = await llm.complete(prompt);
  
  // 4. 格式化输出
  const message = `📈 **财经晨报 ${new Date().toLocaleDateString()}**\n\n${summary}`;
  
  // 5. 根据output参数推送
  if (params.output === 'wechat') {
    await sendToWechat(message);
  } else if (params.output === 'dingtalk') {
    await sendToDingtalk(message);
  } else {
    console.log(message);
  }
  
  return {
    code: 0,
    data: '推送成功'
  };
}

// 微信推送函数(简化)
async function sendToWechat(content: string) {
  // 调用微信机器人API
  // 具体实现取决于使用的微信渠道
}

2.3 配置Cron任务

创建 ~/.openclaw/cron/daily-briefing.yaml

yaml 复制代码
name: daily-briefing
schedule: "0 8 * * *"
type: cron
enabled: true

skill: rss-summary
params:
  feeds:
    - https://www.36kr.com/feed
    - https://www.jiemian.com/rss
    - https://www.cls.cn/feed
  output: wechat
  maxItems: 3

retry:
  max_attempts: 3
  backoff: 60

notify:
  on_failure: true
  channel: dingtalk
  recipients: ["admin"]

2.4 异常处理机制

当任务执行失败时,OpenClaw会自动重试(最多3次),间隔60秒。如果最终仍然失败,会通过配置的渠道(如钉钉)发送告警通知。
Admin Notifier Skill Scheduler Admin Notifier Skill Scheduler 执行任务 失败(抛异常) 记录失败次数=1 等待60秒 重试(第2次) 失败 记录失败次数=2 等待60秒 重试(第3次) 失败 发送告警:任务失败 钉钉通知

三、实战案例2:服务器健康监控(每小时)

第二个案例是监控服务器资源使用率,每小时检查一次,当CPU、内存或磁盘超过阈值时自动发送飞书告警。

3.1 任务逻辑设计









每小时触发
获取CPU使用率
获取内存使用率
获取磁盘使用率
CPU > 80%?
记录CPU告警
G
内存 > 85%?
记录内存告警
J
磁盘 > 90%?
记录磁盘告警
M
有告警?
格式化告警消息
发送飞书
无操作

3.2 开发监控Skill

创建 ~/.openclaw/skills/server-monitor/index.ts

typescript 复制代码
import si from 'systeminformation';
import { sendFeishu } from './feishu'; // 飞书发送模块

interface Params {
  cpuThreshold?: number;      // CPU阈值,默认80
  memThreshold?: number;       // 内存阈值,默认85
  diskThreshold?: number;      // 磁盘阈值,默认90
  diskPath?: string;           // 监控的磁盘路径,默认根目录
  alertChannel?: 'feishu' | 'dingtalk';
}

export async function handler(params: Params) {
  const cpuThreshold = params.cpuThreshold || 80;
  const memThreshold = params.memThreshold || 85;
  const diskThreshold = params.diskThreshold || 90;
  const diskPath = params.diskPath || '/';
  const channel = params.alertChannel || 'feishu';
  
  // 1. 获取系统信息
  const [cpu, mem, disk] = await Promise.all([
    si.currentLoad(),
    si.mem(),
    si.fsSize()
  ]);
  
  const cpuPercent = Math.round(cpu.currentLoad);
  const memPercent = Math.round((mem.active / mem.total) * 100);
  const diskInfo = disk.find(d => d.mount === diskPath);
  const diskPercent = diskInfo ? Math.round(diskInfo.use) : 0;
  
  // 2. 检查阈值
  const alerts = [];
  if (cpuPercent > cpuThreshold) {
    alerts.push(`🔴 CPU使用率过高: ${cpuPercent}% (阈值${cpuThreshold}%)`);
  }
  if (memPercent > memThreshold) {
    alerts.push(`🔴 内存使用率过高: ${memPercent}% (阈值${memThreshold}%)`);
  }
  if (diskPercent > diskThreshold) {
    alerts.push(`🔴 磁盘使用率过高: ${diskPercent}% (阈值${diskThreshold}%)`);
  }
  
  // 3. 如果有告警,发送通知
  if (alerts.length > 0) {
    const message = `🚨 **服务器告警**\n时间: ${new Date().toLocaleString()}\n` + alerts.join('\n');
    
    if (channel === 'feishu') {
      await sendFeishu(message);
    } else {
      // 其他渠道...
    }
    
    return {
      code: 0,
      data: '告警已发送',
      alerts
    };
  }
  
  return {
    code: 0,
    data: '所有指标正常',
    metrics: { cpu: cpuPercent, mem: memPercent, disk: diskPercent }
  };
}

3.3 配置Cron任务

创建 ~/.openclaw/cron/server-monitor.yaml

yaml 复制代码
name: server-monitor
schedule: "0 * * * *"        # 每小时的第0分钟执行
type: cron
enabled: true

skill: server-monitor
params:
  cpuThreshold: 80
  memThreshold: 85
  diskThreshold: 90
  diskPath: "/"
  alertChannel: feishu

retry:
  max_attempts: 2
  backoff: 30

notify:
  on_success: false
  on_failure: true
  channel: dingtalk

3.4 测试与验证

使用命令立即执行一次:

bash 复制代码
openclaw cron run server-monitor

查看日志确认执行结果:

bash 复制代码
tail -f ~/.openclaw/logs/cron.log

四、高级用法:WebHook触发与任务依赖

4.1 WebHook触发任务

除了定时执行,OpenClaw还支持通过HTTP WebHook触发任务。这在Git Push、代码部署等场景非常有用。

配置一个WebHook任务:

yaml 复制代码
# ~/.openclaw/cron/triggered/pr-review.yaml
name: pr-review
type: webhook                  # 指定为WebHook触发
webhook_path: /webhook/github   # 监听路径
method: POST                    # 允许的HTTP方法
secret: "your_github_secret"    # 用于验证签名

skill: code-review
params:
  repo: "{{body.repository.full_name}}"
  pr_number: "{{body.pull_request.number}}"

当GitHub发送WebHook到 https://your-openclaw-server/webhook/github 时,OpenClaw会验证签名,然后执行code-review Skill,并将PR信息作为参数传入。
Skill OpenClaw GitHub Skill OpenClaw GitHub POST /webhook/github (PR event) 验证签名 匹配webhook_path对应的任务 执行code-review skill 审查结果 返回200 OK

4.2 任务依赖与工作流

有时候一个任务的执行需要依赖另一个任务的结果。例如:先抓取数据,再生成报表,最后推送。OpenClaw可以通过在任务中调用其他Skill或使用条件判断来实现工作流。

一种实现方式是让一个Skill在完成自身工作后,主动触发另一个Cron任务(通过OpenClaw的API)。例如:

typescript 复制代码
// 在数据抓取Skill的最后
await openclaw.cron.trigger('generate-report', { dataId: result.id });

或者使用更复杂的编排方式:定义一个"工作流"Skill,它依次调用多个子Skill。


定时触发
数据抓取Skill
抓取成功?
报表生成Skill
记录错误并退出
推送Skill

五、成本控制:单任务Token消耗优化

Cron任务可能频繁调用LLM,导致Token消耗激增。OpenClaw提供了多种优化策略。

5.1 本地模型处理简单逻辑

对于不需要强大推理能力的任务(如格式化数据、简单判断),可以配置使用本地Ollama模型,大幅降低成本。

在任务配置中指定模型:

yaml 复制代码
params:
  model: ollama/llama3:8b     # 强制使用本地模型

5.2 缓存机制

对于重复性查询(如抓取相同RSS),可以启用缓存:

yaml 复制代码
cache:
  enabled: true
  ttl: 3600                    # 缓存1小时

5.3 批量处理与合并

将多个小任务合并为一个批量任务,减少模型调用次数。例如,每小时检查服务器状态和抓取日志可以合并为一个任务。

5.4 成本监控

OpenClaw内置成本统计,可通过命令查看:

bash 复制代码
openclaw cron cost --period day

输出示例:

复制代码
任务ID         调用次数  输入Token  输出Token  预估成本($)
daily-briefing   30       15000      6000       0.42
server-monitor   24       4800       1200       0.12

六、监控与告警:确保任务可靠执行

生产环境中,必须确保Cron任务可靠执行。OpenClaw提供了完善的监控和告警机制。

6.1 任务执行日志

所有Cron任务的执行记录保存在 ~/.openclaw/logs/cron.log,格式为JSONL,每行包含时间、任务ID、状态、耗时、错误信息等。

json 复制代码
{"time":"2026-03-15T08:00:01Z","task":"daily-briefing","status":"success","duration":3.2}
{"time":"2026-03-15T09:00:01Z","task":"server-monitor","status":"failed","error":"RSS抓取超时","duration":10.1}

6.2 失败告警

如前面示例所示,可以在任务配置中设置 notify.on_failure,指定通过钉钉、飞书等渠道发送告警。告警内容包含任务名称、失败时间、错误信息。

6.3 监控大盘

将Cron日志接入Prometheus + Grafana,可以构建可视化监控大盘:
告警
监控系统
OpenClaw
cron.log
Promtail
Loki
Grafana
Alertmanager
钉钉

关键指标:

  • 任务成功率
  • 任务执行耗时
  • 失败任务分布
  • Token消耗趋势

七、结语:让AI真正"卷"起来

从被动响应到主动服务,OpenClaw的Cron定时任务系统为AI智能体赋予了全新的生命力。无论是日常信息汇总、系统监控,还是复杂的工作流编排,OpenClaw都能让AI在无人值守的情况下持续创造价值。

本文通过两个完整案例,展示了如何利用OpenClaw的Cron功能构建实用的自动化工作流。掌握这些技能后,你可以:

  • 打造个人专属的资讯助理,每天定时推送定制化内容
  • 构建企业级监控系统,7×24小时守护服务器健康
  • 实现DevOps自动化,代码提交后自动触发测试、部署、审查

下一篇文章,我们将深入OpenClaw的多Agent协同,探讨如何让多个智能体分工协作,完成更复杂的任务。敬请期待!


本文所有Mermaid图均可直接复制到支持Mermaid的Markdown编辑器中查看。如果你在配置Cron任务时遇到任何问题,欢迎在评论区留言交流。

相关推荐
智算菩萨1 小时前
ChatGPT等AI工具辅助学术论文写作全流程:从选题、润色到降重的实战指南
论文阅读·gpt·ai·语言模型·ai写作
十字花1 小时前
【CVPR 2025】SET:Spectral Enhancement for Tiny Object Detection
论文阅读·人工智能·目标检测·计算机视觉
湘美书院--湘美谈教育1 小时前
湘美谈教育精英智能实验室:当萨特遇上AI,跨存在对话
人工智能·深度学习·神经网络·机器学习·ai写作
孪生质数-2 小时前
OpenClaw小龙虾-Skill安装教程及推荐安装列表
ai·node.js·skill·openclaw·clawhub
我材不敲代码2 小时前
OpenCV 实战——图像形态学操作与边缘检测全解析:从腐蚀膨胀到 Canny 边缘检测
人工智能·opencv·计算机视觉
芯片-嵌入式2 小时前
具身智能(2):OpenExplorer下的模型量化
人工智能·深度学习·算法
DamianGao2 小时前
我用 OpenClaw 做了一个 AI 新闻早报,每天自动推送
人工智能·python·语言模型
Lab_AI2 小时前
电子实验记录本(ELN)助力熙华药业核心竞争力提升
大数据·人工智能·实验室管理·eln·药物研发·ai制药·电子实验记录本
崔高杰2 小时前
训练数据选择又有新方法了?——两篇文章的阅读笔记 Less is Enough和 OPUS
人工智能·笔记·机器学习