目录
-
- 摘要
- [1. 引言:为什么需要定时任务](#1. 引言:为什么需要定时任务)
- [2. Cron 调度系统架构](#2. Cron 调度系统架构)
-
- [2.1 整体架构设计](#2.1 整体架构设计)
- [2.2 核心组件详解](#2.2 核心组件详解)
-
- [2.2.1 调度引擎](#2.2.1 调度引擎)
- [2.2.2 执行器池](#2.2.2 执行器池)
- [2.2.3 任务存储](#2.2.3 任务存储)
- [2.3 数据流转过程](#2.3 数据流转过程)
- [3. Cron 工具详解](#3. Cron 工具详解)
-
- [3.1 命令概览](#3.1 命令概览)
- [3.2 任务创建命令](#3.2 任务创建命令)
- [3.3 任务管理命令](#3.3 任务管理命令)
-
- [3.3.1 查看任务列表](#3.3.1 查看任务列表)
- [3.3.2 编辑任务](#3.3.2 编辑任务)
- [3.3.3 删除任务](#3.3.3 删除任务)
- [3.4 调试与监控命令](#3.4 调试与监控命令)
-
- [3.4.1 立即执行](#3.4.1 立即执行)
- [3.4.2 查看运行历史](#3.4.2 查看运行历史)
- [3.4.3 查看调度器状态](#3.4.3 查看调度器状态)
- [4. 任务创建与管理](#4. 任务创建与管理)
-
- [4.1 创建周期性任务](#4.1 创建周期性任务)
- [4.2 创建间隔性任务](#4.2 创建间隔性任务)
- [4.3 创建一次性任务](#4.3 创建一次性任务)
- [4.4 任务管理最佳实践](#4.4 任务管理最佳实践)
- [5. 调度表达式语法](#5. 调度表达式语法)
-
- [5.1 Cron 表达式基础](#5.1 Cron 表达式基础)
- [5.2 特殊字符说明](#5.2 特殊字符说明)
- [5.3 常用表达式示例](#5.3 常用表达式示例)
- [5.4 时区处理](#5.4 时区处理)
- [6. 任务执行与监控](#6. 任务执行与监控)
-
- [6.1 执行流程详解](#6.1 执行流程详解)
- [6.2 超时控制](#6.2 超时控制)
- [6.3 运行历史查询](#6.3 运行历史查询)
- [6.4 调度器状态监控](#6.4 调度器状态监控)
- [6.5 任务执行状态流转](#6.5 任务执行状态流转)
- [7. 实战案例](#7. 实战案例)
-
- [7.1 案例一:每日健康检查自动化](#7.1 案例一:每日健康检查自动化)
- [7.2 案例二:周期性内容推送](#7.2 案例二:周期性内容推送)
- [7.3 案例三:工作日提醒系统](#7.3 案例三:工作日提醒系统)
- [7.4 案例四:结合 Skill 的自动化运维](#7.4 案例四:结合 Skill 的自动化运维)
- [8. 高级配置](#8. 高级配置)
-
- [8.1 任务错峰执行](#8.1 任务错峰执行)
- [8.2 会话隔离](#8.2 会话隔离)
- [8.3 模型覆盖](#8.3 模型覆盖)
- [9. 故障排查指南](#9. 故障排查指南)
-
- [9.1 常见问题与解决方案](#9.1 常见问题与解决方案)
- [9.2 调试技巧](#9.2 调试技巧)
- [10. 总结](#10. 总结)
- 参考资料
摘要
本文全面解析 OpenClaw 框架的定时任务与 Cron 调度系统,从架构设计到实战应用,深入探讨如何利用这一强大功能实现 AI 助手的自动化运维。文章首先介绍 Cron 调度系统的整体架构与核心组件,然后详细讲解 openclaw cron 命令行工具的各项功能,包括任务创建、编辑、监控和调试。通过丰富的代码示例和实战案例,读者将掌握调度表达式的编写技巧、任务执行状态的追踪方法,以及生产环境中的最佳实践。无论是定时发送提醒、周期性执行健康检查,还是自动化内容推送,OpenClaw 的 Cron 系统都能提供灵活可靠的解决方案。
1. 引言:为什么需要定时任务
在 AI 助手的实际应用中,定时任务扮演着不可或缺的角色。想象一下这样的场景:你希望每天早上 8 点收到天气预报,每周一自动生成工作周报,或者每隔 30 分钟检查一次系统健康状态。这些需求都离不开一个可靠的定时调度系统。
传统的定时任务方案通常依赖于操作系统的 cron 服务,虽然功能强大,但配置复杂、管理分散、缺乏可视化监控。更重要的是,系统级 cron 任务与 AI 助手应用之间存在割裂,难以实现深度的业务集成。传统的 cron 服务要求用户熟悉 Linux 命令行操作,需要通过 crontab -e 编辑配置文件,语法晦涩难懂,一旦配置错误很难排查问题。此外,系统级 cron 的日志分散在系统日志中,缺乏统一的监控和告警机制,任务执行失败时往往无法及时发现。
OpenClaw 框架内置了完整的 Cron 调度系统,将定时任务能力原生集成到 AI 助手的工作流中。这一设计带来了几个显著的优势:首先,通过简洁的命令行工具和 REST API,用户可以轻松创建和管理定时任务,无需深入了解 cron 表达式的复杂语法;其次,任务执行历史被完整记录,支持随时查询和追溯,便于问题排查和效果评估;第三,任务执行结果可以自动推送到飞书、Telegram、Discord 等多种渠道,实现真正的智能化通知;最后,定时任务与 AI 助手深度集成,任务触发时可以执行复杂的 AI 操作,如数据分析、内容生成、智能决策等。
| 特性 | 系统级 Cron | OpenClaw Cron |
|---|---|---|
| 配置方式 | 编辑 crontab 文件 | 命令行工具 + API |
| 任务管理 | 分散在各服务器 | 集中式管理 |
| 监控能力 | 需额外配置 | 内置运行历史 |
| AI 集成 | 需自行开发 | 原生支持 |
| 消息推送 | 需额外脚本 | 自动推送结果 |
| 调试能力 | 手动执行测试 | 一键立即执行 |
| 时区支持 | 系统时区 | 多时区配置 |
| 错误处理 | 日志记录 | 结构化错误报告 |
通过 OpenClaw 的 Cron 系统,开发者可以轻松创建与 AI 助手深度集成的定时任务,实现智能化的自动化运维。无论是个人用户希望自动化日常提醒,还是企业用户需要构建复杂的运维自动化流程,OpenClaw 的 Cron 系统都能提供灵活可靠的解决方案。
2. Cron 调度系统架构
2.1 整体架构设计
OpenClaw 的 Cron 调度系统采用分层架构设计,从任务定义、调度引擎、执行器到结果处理,每一层都有明确的职责边界。这种设计既保证了系统的可扩展性,又确保了任务执行的可靠性。
📢 通知层
💾 存储层
🚀 执行层
⚙️ 调度层
👤 用户层
CLI 命令
API 调用
配置文件
任务注册表
调度引擎
时间计算器
任务队列
执行器池
超时控制
任务存储
运行历史
状态缓存
消息推送
结果汇总
从架构图可以看出,Cron 系统分为五个核心层次:
用户层:提供多种任务创建入口,包括命令行工具、REST API 和配置文件方式,满足不同场景的使用需求。
调度层:核心调度逻辑所在,负责解析 cron 表达式、计算下次执行时间、触发任务执行。
执行层:实际执行任务的组件,支持并发执行、超时控制、错误重试等机制。
存储层:持久化任务定义和运行历史,支持任务状态的恢复和查询。
通知层:将任务执行结果推送到指定渠道,支持飞书、Telegram、Discord 等多平台。
2.2 核心组件详解
OpenClaw 的 Cron 调度系统由多个核心组件协同工作,每个组件都有明确的职责边界。理解这些组件的工作原理,有助于更好地使用和调试定时任务功能。
2.2.1 调度引擎
调度引擎是 Cron 系统的心脏,它基于时间轮算法实现高效的定时触发。引擎会持续扫描任务注册表,计算每个任务的下次执行时间,并在时间到达时将任务推入执行队列。时间轮算法是一种高效的定时器实现方式,它将时间划分为固定大小的槽位,每个槽位对应一个时间点,任务根据其执行时间被分配到相应的槽位中。当时间轮转动到某个槽位时,该槽位中的所有任务都会被触发执行。
调度引擎支持两种调度模式:
-
周期性调度:基于 cron 表达式的周期性任务,如每天、每小时执行。这种方式适合需要固定时间执行的任务,如每日报告、定期备份等。
-
一次性调度:指定具体时间执行一次的任务,适合提醒类场景。任务执行完成后可以自动删除,也可以保留用于后续查询。
调度引擎还支持任务错峰执行功能。当大量任务配置了相同的执行时间时,引擎可以自动将任务分散到指定的时间窗口内执行,避免对系统造成瞬时压力。
2.2.2 执行器池
执行器池管理着一组工作线程,负责实际执行任务逻辑。每个任务执行都是独立的,互不干扰。执行器采用线程池模式,可以并发执行多个任务,同时限制最大并发数以保护系统资源。当任务数量超过线程池容量时,新任务会在队列中等待,直到有线程空闲。
执行器支持多种执行控制机制:
- 超时自动终止:每个任务都有独立的超时计时器,超时后自动终止执行,防止任务无限期阻塞
- 执行结果捕获:完整捕获任务的标准输出和错误输出,便于问题排查
- 异常日志记录:记录任务执行过程中的所有异常信息,包括堆栈跟踪
- 资源使用限制:限制单个任务的最大内存和 CPU 使用,防止资源耗尽
2.2.3 任务存储
任务存储采用 JSONL 格式记录运行历史,每条记录包含任务 ID、执行时间、状态、输出等完整信息。JSONL(JSON Lines)是一种每行一个 JSON 对象的格式,非常适合日志类数据的存储和追加写入。这种设计便于日志分析和问题追溯,可以使用标准的文本处理工具(如 grep、jq)进行查询和分析。
任务存储还负责持久化任务定义,确保系统重启后任务不会丢失。任务定义包括任务名称、cron 表达式、消息内容、推送配置等所有参数,存储在本地文件中,支持快速加载和恢复。
2.3 数据流转过程
通知 存储 执行器 调度引擎 Gateway CLI/API 用户 通知 存储 执行器 调度引擎 Gateway CLI/API 用户 loop 调度循环 创建定时任务 发送任务定义 注册任务 持久化任务 检查待执行任务 触发任务执行 执行任务逻辑 记录执行结果 推送执行结果 消息通知
3. Cron 工具详解
3.1 命令概览
OpenClaw 提供了完整的 openclaw cron 命令行工具,支持定时任务的全生命周期管理。通过这个工具,用户可以轻松创建、查询、修改、删除和调试定时任务。
bash
# 查看帮助信息
openclaw cron --help
# 可用命令
Commands:
add Add a cron job # 创建定时任务
disable Disable a cron job # 禁用任务
edit Edit a cron job # 编辑任务
enable Enable a cron job # 启用任务
list List cron jobs # 列出所有任务
rm Remove a cron job # 删除任务
run Run a cron job now # 立即执行任务
runs Show cron run history # 查看运行历史
status Show cron scheduler status # 查看调度器状态
3.2 任务创建命令
openclaw cron add 是最核心的命令,支持丰富的参数配置。下面详细解析各个参数的含义和使用场景。
bash
openclaw cron add --help
核心参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
--name |
任务名称,唯一标识 | --name daily-weather |
--cron |
Cron 表达式 | --cron "0 8 * * *" |
--every |
间隔执行 | --every 30m |
--at |
一次性执行时间 | --at "2024-12-25T08:00:00" |
--message |
发送给 AI 的消息 | --message "发送天气预报" |
--agent |
指定执行代理 | --agent my-agent |
--channel |
结果推送渠道 | --channel feishu |
--to |
推送目标 | --to ou_xxx |
--tz |
时区设置 | --tz Asia/Shanghai |
--description |
任务描述 | --description "每日天气提醒" |
上述参数表格展示了 openclaw cron add 命令的核心配置项。其中 --cron 和 --every 是两种不同的调度方式:前者基于精确的时间表达式,适合固定时间执行的场景;后者基于时间间隔,适合周期性重复执行的场景。--message 参数定义了任务触发时发送给 AI 助手的消息内容,AI 将根据这条消息执行相应的操作。--channel 和 --to 参数共同决定了任务执行结果的推送目标,支持飞书、Telegram、Discord 等多种平台。
3.3 任务管理命令
3.3.1 查看任务列表
bash
# 列出所有启用的定时任务
openclaw cron list
# 包含已禁用的任务
openclaw cron list --all
# JSON 格式输出
openclaw cron list --json
3.3.2 编辑任务
bash
# 修改任务的 cron 表达式
openclaw cron edit <job-id> --cron "0 9 * * 1-5"
# 修改任务消息
openclaw cron edit <job-id> --message "新的任务内容"
# 启用/禁用任务
openclaw cron edit <job-id> --enable
openclaw cron edit <job-id> --disable
3.3.3 删除任务
bash
# 删除指定任务
openclaw cron rm <job-id>
3.4 调试与监控命令
3.4.1 立即执行
bash
# 立即执行指定任务(用于调试)
openclaw cron run <job-id>
这个命令非常适合调试场景,可以在不等待调度时间的情况下立即触发任务执行,验证任务配置是否正确。
3.4.2 查看运行历史
bash
# 查看所有任务的运行历史
openclaw cron runs
# 查看指定任务的运行历史
openclaw cron runs --id <job-id>
# 限制返回条数
openclaw cron runs --limit 100
3.4.3 查看调度器状态
bash
# 查看调度器运行状态
openclaw cron status
4. 任务创建与管理
4.1 创建周期性任务
周期性任务是 Cron 系统最常用的功能,适合需要定期执行的场景。下面通过一个完整的示例演示如何创建每日天气预报任务。
bash
# 创建每日早上 8 点发送天气预报的任务
openclaw cron add \
--name "daily-weather-report" \
--cron "0 8 * * *" \
--message "请查询北京今天的天气情况,并以简洁的格式发送给我" \
--channel feishu \
--tz "Asia/Shanghai" \
--description "每日天气预报提醒" \
--announce
上述命令创建了一个名为 daily-weather-report 的定时任务,每天早上 8 点(上海时区)自动执行。任务触发时,AI 助手会收到指定的消息内容,执行天气查询操作,并将结果通过飞书推送给用户。--announce 参数表示任务执行完成后会自动推送结果摘要到指定渠道。
4.2 创建间隔性任务
对于需要按固定间隔执行的任务,可以使用 --every 参数,这种方式更加简洁直观。
bash
# 每 30 分钟执行一次健康检查
openclaw cron add \
--name "health-check" \
--every 30m \
--message "执行系统健康检查,检查 CPU、内存、磁盘使用情况" \
--description "系统健康监控" \
--announce
上述命令创建了一个每 30 分钟执行一次的健康检查任务。--every 参数支持多种时间单位,包括 s(秒)、m(分钟)、h(小时)、d(天)。这种方式特别适合监控类任务,无需编写复杂的 cron 表达式。
4.3 创建一次性任务
一次性任务在指定时间执行一次后自动删除,适合提醒类场景。
bash
# 创建一个会议提醒(一次性任务)
openclaw cron add \
--name "meeting-reminder" \
--at "2024-12-20T14:30:00" \
--message "提醒:15分钟后有产品评审会议,会议室 A301" \
--channel feishu \
--delete-after-run \
--description "会议提醒"
上述命令创建了一个一次性会议提醒任务,在指定时间执行后会自动删除。--delete-after-run 参数确保任务执行完成后自动清理,避免占用存储空间。
4.4 任务管理最佳实践
周期性
间隔性
一次性
是
否
是
否
创建任务
任务类型?
使用 --cron 参数
使用 --every 参数
使用 --at 参数
编写 cron 表达式
指定时间间隔
指定执行时间
添加任务名称和描述
配置消息内容
设置推送渠道
需要调试?
使用 cron run 测试
任务创建完成
检查运行结果
结果正确?
使用 cron edit 修改
5. 调度表达式语法
5.1 Cron 表达式基础
Cron 表达式是定时任务的核心,它定义了任务的执行时间规则。OpenClaw 支持标准的 5 字段 cron 表达式,同时也支持扩展的 6 字段格式(包含秒)。
标准 5 字段格式:
┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 日期 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期 (0 - 6, 0=周日)
│ │ │ │ │
* * * * *
扩展 6 字段格式(支持秒级精度):
┌───────────── 秒 (0 - 59)
│ ┌───────────── 分钟 (0 - 59)
│ │ ┌───────────── 小时 (0 - 23)
│ │ │ ┌───────────── 日期 (1 - 31)
│ │ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ │ ┌───────────── 星期 (0 - 6)
│ │ │ │ │ │
* * * * * *
5.2 特殊字符说明
| 字符 | 含义 | 示例 |
|---|---|---|
* |
任意值 | * * * * * 每分钟执行 |
, |
值列表 | 0,30 * * * * 每小时的第 0 和 30 分钟 |
- |
范围 | 0 9-17 * * * 9点到17点每小时执行 |
/ |
步长 | */15 * * * * 每 15 分钟执行 |
L |
最后 | 0 0 L * * 每月最后一天执行 |
W |
工作日 | 0 0 15W * * 最接近 15 号的工作日 |
5.3 常用表达式示例
下面列出了一些常用的 cron 表达式及其含义,方便读者参考使用:
| 表达式 | 含义 |
|---|---|
0 * * * * |
每小时整点执行 |
0 8 * * * |
每天早上 8 点执行 |
0 9 * * 1-5 |
周一到周五早上 9 点执行 |
0 0 * * 0 |
每周日午夜执行 |
0 0 1 * * |
每月 1 号午夜执行 |
*/5 * * * * |
每 5 分钟执行一次 |
0 8,12,18 * * * |
每天 8 点、12 点、18 点执行 |
0 9 * * 1 |
每周一早上 9 点执行 |
0 0 1 1 * |
每年 1 月 1 号午夜执行 |
5.4 时区处理
OpenClaw 的 Cron 系统支持时区配置,确保任务在正确的时间执行。默认情况下,任务使用系统时区,但可以通过 --tz 参数指定 IANA 时区标识符。
bash
# 使用上海时区
openclaw cron add --name "tokyo-report" --cron "0 9 * * *" --tz "Asia/Tokyo" --message "东京时间早上9点报告"
# 使用纽约时区
openclaw cron add --name "ny-report" --cron "0 9 * * *" --tz "America/New_York" --message "纽约时间早上9点报告"
上述示例展示了如何为不同时区创建定时任务。第一个任务在东京时间早上 9 点执行,第二个任务在纽约时间早上 9 点执行。时区配置对于跨时区部署的应用尤为重要,确保任务在预期的本地时间执行。
6. 任务执行与监控
6.1 执行流程详解
当一个定时任务被触发时,OpenClaw 会按照以下流程执行:
数据存储 通知服务 AI 引擎 执行器 任务队列 调度器 数据存储 通知服务 AI 引擎 执行器 任务队列 调度器 alt 执行成功 执行超时 执行失败 推送任务到队列 分配执行器 初始化执行上下文 发送任务消息 返回处理结果 推送成功通知 记录成功状态 终止执行 推送超时通知 记录超时状态 返回错误信息 推送失败通知 记录失败状态
6.2 超时控制
OpenClaw 的 Cron 系统内置了超时控制机制,防止任务长时间阻塞。默认超时时间为 30 秒,可以通过参数调整。
bash
# 设置任务超时时间为 60 秒
openclaw cron add \
--name "long-task" \
--cron "0 2 * * *" \
--message "执行长时间数据处理任务" \
--timeout 60000 \
--description "数据处理任务(60秒超时)"
上述命令创建了一个超时时间为 60 秒的定时任务。如果任务执行超过 60 秒,系统会自动终止执行并记录超时状态。合理设置超时时间对于保护系统稳定性非常重要,特别是在执行可能耗时较长的任务时。
6.3 运行历史查询
OpenClaw 会记录每个任务的执行历史,包括执行时间、状态、输出等信息。通过 openclaw cron runs 命令可以查询这些历史记录。
bash
# 查看最近 50 条运行记录
openclaw cron runs --limit 50
# 查看指定任务的运行历史
openclaw cron runs --id job-123
# JSON 格式输出,便于程序处理
openclaw cron runs --json
运行历史以 JSONL 格式存储,每条记录包含以下字段:
json
{
"jobId": "job-123",
"name": "daily-weather-report",
"runAt": "2024-12-20T08:00:00Z",
"status": "success",
"duration": 2345,
"output": "北京今日天气:晴,气温 -5°C 到 5°C...",
"error": null
}
上述 JSON 示例展示了一条运行历史记录的完整结构。status 字段表示执行状态,可能的值包括 success(成功)、timeout(超时)、error(错误)。duration 字段记录了任务执行耗时(毫秒),output 字段包含了任务的输出结果。
6.4 调度器状态监控
bash
# 查看调度器状态
openclaw cron status
调度器状态信息包括:
- 调度器是否运行
- 当前注册的任务数量
- 最近执行的任务
- 待执行的任务队列
6.5 任务执行状态流转
任务创建
到达执行时间
开始执行
执行成功
执行失败
执行超时
记录历史
记录历史
记录历史
禁用任务
启用任务
Pending
Scheduled
Running
Success
Failed
Timeout
Disabled
7. 实战案例
7.1 案例一:每日健康检查自动化
本案例演示如何使用 OpenClaw Cron 系统实现每日自动化的系统健康检查,并将结果推送到飞书群。
bash
#!/bin/bash
# ============================================================
# OpenClaw Cron 任务管理脚本 - 健康检查自动化
# 功能:创建、管理和监控每日健康检查任务
# 作者:OpenClaw 团队
# ============================================================
# 配置变量
JOB_NAME="daily-health-check"
CRON_EXPR="0 9 * * *" # 每天早上 9 点执行
TIMEZONE="Asia/Shanghai"
CHANNEL="feishu"
TARGET="oc_xxx" # 飞书群 ID
# 步骤 1:创建健康检查任务
echo "正在创建健康检查任务..."
openclaw cron add \
--name "$JOB_NAME" \
--cron "$CRON_EXPR" \
--message "执行以下健康检查:
1. 检查系统 CPU 使用率,如果超过 80% 发出警告
2. 检查内存使用情况,如果超过 85% 发出警告
3. 检查磁盘空间,如果剩余空间低于 10GB 发出警告
4. 检查关键服务状态(nginx、mysql、redis)
5. 检查系统负载情况
将结果整理成简洁的报告格式,标注需要关注的问题。" \
--channel "$CHANNEL" \
--to "$TARGET" \
--tz "$TIMEZONE" \
--description "每日系统健康检查" \
--announce
# 步骤 2:验证任务创建成功
echo "验证任务创建状态..."
openclaw cron list | grep "$JOB_NAME"
# 步骤 3:获取任务 ID
JOB_ID=$(openclaw cron list --json | jq -r ".[] | select(.name==\"$JOB_NAME\") | .id")
echo "任务 ID: $JOB_ID"
# 步骤 4:测试任务执行
echo "立即执行任务进行测试..."
openclaw cron run "$JOB_ID"
# 步骤 5:等待执行完成
sleep 10
# 步骤 6:查看执行结果
echo "查看最近执行结果..."
openclaw cron runs --id "$JOB_ID" --limit 5
echo "健康检查任务配置完成!"
上述代码展示了创建每日健康检查任务的完整流程。首先使用 openclaw cron add 命令创建任务,指定每天早上 9 点执行。任务消息中详细描述了需要检查的内容,AI 助手会根据这些指令执行相应的检查操作。创建完成后,通过 list 命令验证任务是否创建成功,然后使用 run 命令立即执行一次测试,最后通过 runs 命令查看执行结果。
7.2 案例二:周期性内容推送
本案例演示如何创建一个每小时自动推送热门新闻的任务。
bash
#!/bin/bash
# ============================================================
# OpenClaw Cron 任务管理脚本 - 新闻推送自动化
# 功能:创建周期性新闻推送任务
# ============================================================
# 创建每小时新闻推送任务
openclaw cron add \
--name "hourly-news" \
--cron "0 * * * *" \
--message "搜索并总结过去一小时的科技新闻热点,生成 5 条最值得关注的新闻摘要,每条不超过 50 字。" \
--channel telegram \
--to "-100123456789" \
--description "每小时科技新闻推送" \
--announce
上述命令创建了一个每小时整点执行的新闻推送任务。任务触发时,AI 助手会搜索最新的科技新闻,进行筛选和总结,然后生成简洁的新闻摘要推送到指定的 Telegram 群组。这种自动化的内容推送机制非常适合需要持续关注特定领域动态的场景。
7.3 案例三:工作日提醒系统
本案例演示如何创建一个工作日提醒系统,在周一到周五的特定时间发送不同的提醒内容。
bash
#!/bin/bash
# ============================================================
# OpenClaw Cron 任务管理脚本 - 工作日提醒系统
# 功能:创建工作日的早间、午间、下班提醒
# ============================================================
# 配置变量
TIMEZONE="Asia/Shanghai"
CHANNEL="feishu"
# 创建早间工作提醒
echo "创建早间工作提醒..."
openclaw cron add \
--name "morning-reminder" \
--cron "0 8 * * 1-5" \
--message "早安!今天是工作日,请查看今日待办事项,规划好一天的工作安排。
请帮我:
1. 回顾昨天的任务完成情况
2. 列出今天的重点事项
3. 提醒即将到来的会议或截止日期" \
--channel "$CHANNEL" \
--tz "$TIMEZONE" \
--description "工作日早间提醒" \
--announce
# 创建午间休息提醒
echo "创建午间休息提醒..."
openclaw cron add \
--name "lunch-reminder" \
--cron "0 12 * * 1-5" \
--message "午休时间到了!记得休息一下,下午继续加油。
建议:
- 离开电脑屏幕,让眼睛休息
- 简单的伸展运动
- 准备下午的工作任务" \
--channel "$CHANNEL" \
--tz "$TIMEZONE" \
--description "午间休息提醒" \
--announce
# 创建下班提醒
echo "创建下班提醒..."
openclaw cron add \
--name "evening-reminder" \
--cron "0 18 * * 1-5" \
--message "下班时间到!请整理今日工作成果,规划明日任务。
今日总结:
1. 完成了哪些任务?
2. 遇到了什么问题?
3. 明天的优先事项是什么?
祝你有个愉快的晚上!" \
--channel "$CHANNEL" \
--tz "$TIMEZONE" \
--description "下班提醒" \
--announce
echo "工作日提醒系统创建完成!"
echo "已创建任务列表:"
openclaw cron list | grep -E "morning|lunch|evening"
上述代码创建了三个工作日提醒任务,分别在工作日的早上 8 点、中午 12 点和下午 6 点触发。cron 表达式 0 8 * * 1-5 中的 1-5 表示周一到周五,确保任务只在工作日执行。这种多任务组合的方式可以构建完整的日程提醒系统。
7.4 案例四:结合 Skill 的自动化运维
OpenClaw 的 Cron 系统可以与 Skill 系统深度结合,实现更复杂的自动化运维场景。以下示例展示了如何定时执行安全审计任务。
bash
#!/bin/bash
# ============================================================
# OpenClaw Cron 任务管理脚本 - 自动化安全审计
# 功能:创建每周安全审计任务,结合 healthcheck skill
# ============================================================
# 配置变量
JOB_NAME="weekly-security-audit"
CRON_EXPR="0 2 * * 0" # 每周日凌晨 2 点执行
TIMEOUT=120000 # 120 秒超时
AGENT="security-agent"
TEAM_ID="ou_security_team"
# 创建每周安全审计任务
echo "正在创建安全审计任务..."
openclaw cron add \
--name "$JOB_NAME" \
--cron "$CRON_EXPR" \
--message "执行安全审计,请按照以下步骤操作:
## 1. 系统端口检查
- 检查所有开放的网络端口
- 识别异常的监听服务
- 标记不需要的开放端口
## 2. SSH 配置审计
- 检查 SSH 配置文件 /etc/ssh/sshd_config
- 验证是否禁用 root 登录
- 验证是否使用密钥认证
- 检查 SSH 端口是否为非默认端口
## 3. 防火墙状态
- 检查防火墙是否启用
- 列出当前的防火墙规则
- 识别可能的规则冲突
## 4. 安全更新状态
- 检查待安装的安全更新数量
- 列出关键安全补丁
- 建议更新优先级
## 5. 用户权限审计
- 检查 sudo 用户列表
- 识别异常的用户账户
- 检查最近登录记录
请生成详细的安全报告,标注发现的问题和修复建议。
报告格式要求:
- 使用 Markdown 格式
- 按严重程度分类(高/中/低)
- 每个问题提供具体的修复命令" \
--agent "$AGENT" \
--thinking "high" \
--channel feishu \
--to "$TEAM_ID" \
--description "每周安全审计" \
--timeout "$TIMEOUT" \
--announce
# 验证任务创建
echo "验证任务创建状态..."
openclaw cron list --json | jq ".[] | select(.name==\"$JOB_NAME\")"
# 立即执行一次测试
echo "执行测试运行..."
JOB_ID=$(openclaw cron list --json | jq -r ".[] | select(.name==\"$JOB_NAME\") | .id")
openclaw cron run "$JOB_ID"
echo "安全审计任务配置完成!"
上述命令创建了一个每周日凌晨 2 点执行的安全审计任务。任务指定了专门的 security-agent 代理执行,并启用了高级推理模式(--thinking high),确保审计结果的准确性。超时时间设置为 120 秒,适应安全审计可能需要的较长执行时间。
8. 高级配置
8.1 任务错峰执行
当有大量定时任务需要在同一时间执行时,可能会对系统造成压力。OpenClaw 提供了任务错峰机制,自动将任务分散到指定的时间窗口内执行。
bash
# 创建带错峰的任务
openclaw cron add \
--name "batch-report" \
--cron "0 8 * * *" \
--stagger 5m \
--message "生成每日报告" \
--description "错峰执行的报告任务"
上述命令中的 --stagger 5m 参数表示任务会在 8:00 到 8:05 之间的某个随机时间点执行,避免与其他整点任务冲突。
8.2 会话隔离
对于需要独立执行环境的任务,可以配置会话隔离模式。
bash
# 创建隔离会话任务
openclaw cron add \
--name "isolated-task" \
--cron "0 3 * * *" \
--session "isolated" \
--session-key "cron:nightly-cleanup" \
--message "执行夜间清理任务" \
--description "隔离会话的清理任务"
8.3 模型覆盖
可以为特定任务指定使用的 AI 模型,实现不同任务使用不同模型的效果。
bash
# 使用特定模型执行任务
openclaw cron add \
--name "complex-analysis" \
--cron "0 4 * * *" \
--model "anthropic/claude-opus-4" \
--message "执行复杂的数据分析任务" \
--description "使用高级模型的分析任务"
9. 故障排查指南
9.1 常见问题与解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 任务未执行 | 调度器未启动 | 检查 Gateway 状态 |
| 任务执行超时 | 任务耗时过长 | 增加 timeout 参数 |
| 推送失败 | 渠道配置错误 | 检查 channel 和 to 参数 |
| 时区不正确 | 未设置时区 | 添加 --tz 参数 |
| 任务重复执行 | 任务重复创建 | 检查任务列表,删除重复任务 |
9.2 调试技巧
bash
# 1. 检查调度器状态
openclaw cron status
# 2. 查看任务列表
openclaw cron list --all
# 3. 立即执行任务测试
openclaw cron run <job-id>
# 4. 查看执行历史
openclaw cron runs --id <job-id> --limit 10
# 5. 检查 Gateway 日志
openclaw logs --filter cron
10. 总结
OpenClaw 的定时任务与 Cron 调度系统为 AI 助手提供了强大的自动化能力,将传统 cron 的可靠性与 AI 的智能性完美结合。通过本文的深入探讨,我们全面了解了这一系统的架构设计、命令行工具、调度表达式语法以及实战应用。
核心要点回顾:
-
架构设计:分层架构确保了系统的可扩展性和可靠性,从任务定义到结果通知形成完整闭环。
-
命令行工具 :
openclaw cron提供了完整的任务管理能力,支持创建、编辑、删除、调试等全生命周期操作。 -
调度表达式:支持标准 5 字段和扩展 6 字段格式,配合时区配置,满足各种复杂的调度需求。
-
监控能力:内置运行历史记录和状态查询功能,便于问题排查和效果追踪。
-
AI 集成:任务执行结果可以自动推送到指定渠道,实现真正的智能化自动化运维。
最佳实践建议:
- 为每个任务添加清晰的名称和描述,便于后续维护
- 合理设置超时时间,避免任务长时间阻塞
- 使用
--stagger参数实现任务错峰,减轻系统压力 - 定期检查运行历史,及时发现和处理异常
- 对于重要任务,配置结果推送,确保及时获知执行状态
OpenClaw 的 Cron 系统不仅是一个定时任务工具,更是 AI 助手自动化能力的核心基础设施。通过灵活运用这一系统,开发者可以构建出智能、可靠、高效的自动化应用,大幅提升运维效率和用户体验。