OpenClaw Cron 定时任务:让 AI 自动为你工作
OpenClaw Cron 定时任务:让 AI 自动为你工作
定时任务(Cron Jobs)是 OpenClaw 强大的自动化功能之一,它允许你预设任务并按计划自动执行。通过 Cron 功能,你的 AI 助手可以在指定时间自动执行各种任务,如发送报告、收集数据、执行检查等。本文将详细介绍 OpenClaw Cron 的配置和使用方法。
Cron 基础概念
什么是 Cron?
Cron 是一个基于时间的任务调度器,最初是 UNIX 系统的内置功能。它允许用户在固定时间、日期或间隔执行命令或脚本。
Cron 表达式
Cron 表达式由 5 个字段组成:
┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 日期 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期 (0 - 6, 0 = 周日)
│ │ │ │ │
* * * * *
常用 Cron 表达式
| 表达式 | 含义 | 示例 |
|---|---|---|
* * * * * |
每分钟 | - |
0 * * * * |
每小时整点 | 1:00, 2:00 |
0 0 * * * |
每天午夜 | 00:00 |
0 8 * * * |
每天早上 8 点 | 08:00 |
0 8 * * 1-5 |
工作日早上 8 点 | 周一至周五 08:00 |
0 0 * * 0 |
每周日午夜 | 周日 00:00 |
0 0 1 * * |
每月第一天 | 每月1日 00:00 |
*/15 * * * * |
每 15 分钟 | - |
0 */2 * * * |
每 2 小时 | 2:00, 4:00 |
OpenClaw Cron 配置
基础配置
在 config/cron.yaml 中配置定时任务:
# config/cron.yaml
version: 1
# 全局设置
settings:
# 是否启用 Cron
enabled: true
# 时区
timezone: "Asia/Shanghai"
# 最大并发任务数
maxConcurrent: 5
# 任务超时时间(毫秒)
timeout: 300000
# 定时任务列表
tasks:
- name: "daily-report"
description: "每日报告"
# Cron 表达式
schedule: "0 8 * * *"
# 是否启用
enabled: true
# 技能名称
skill: "daily-report"
# 传递给技能的参数
params:
recipients:
- "admin@example.com"
format: "html"
任务配置详解
tasks:
- name: "task-name" # 任务名称(必需)
description: "任务描述" # 任务描述
schedule: "0 8 * * *" # Cron 表达式(必需)
enabled: true # 是否启用
skill: "skill-name" # 要执行的技能(必需)
# 传递给技能的参数
params:
key: "value"
# 触发条件(可选)
conditions:
# 只在特定日期执行
dates:
- "2024-01-01"
# 只在特定星期几执行
daysOfWeek:
- 1 # 周一
- 5 # 周五
# 失败重试
retry:
enabled: true
maxAttempts: 3
delay: 60000 # 60秒
# 通知设置
notify:
onSuccess: false
onFailure: true
channels:
- type: "telegram"
target: "${ADMIN_ID}"
技能中的 Cron 处理
在技能中接收定时任务的参数:
// skills/daily-report/index.js
module.exports = {
name: 'daily-report',
description: '生成每日报告',
async execute(params, context) {
// 从 params 获取配置参数
const recipients = params.recipients || [];
const format = params.format || 'text';
// 从 context 获取执行信息
const executionTime = context.cron?.executionTime;
const isScheduled = context.cron?.isScheduled;
// 执行报告生成逻辑
const report = await generateReport({
date: executionTime,
format
});
// 发送报告
for (const recipient of recipients) {
await sendReport(recipient, report);
}
return {
type: 'text',
content: `报告已发送给 ${recipients.length} 个收件人`
};
}
};
实际应用案例
案例 1:每日数据报告
# 每天早上 8 点发送数据报告
tasks:
- name: "daily-data-report"
description: "每日数据汇总报告"
schedule: "0 8 * * *"
skill: "data-report"
params:
type: "daily"
channels:
- "telegram"
- "discord"
技能实现:
// skills/data-report/index.js
module.exports = {
name: 'data-report',
async execute(params, context) {
const { type, channels } = params;
// 1. 获取数据
const data = await fetchDataFromAPI();
// 2. 生成报告
const report = generateReport(data, type);
// 3. 发送到各平台
const results = [];
for (const channel of channels) {
const result = await notifyChannel(channel, report);
results.push({ channel, success: result });
}
// 4. 返回结果摘要
const successCount = results.filter(r => r.success).length;
return {
type: 'text',
content: `✅ 报告发送完成:成功 ${successCount}/${channels.length}`
};
}
};
案例 2:每周周报汇总
# 每周五下午 6 点发送周报
tasks:
- name: "weekly-summary"
description: "每周工作汇总"
schedule: "0 18 * * 5"
skill: "weekly-summary"
params:
period: "week"
案例 3:定时健康检查
# 每 15 分钟检查系统状态
tasks:
- name: "health-check"
description: "系统健康检查"
schedule: "*/15 * * * *"
skill: "health-checker"
params:
checkItems:
- "api"
- "database"
- "storage"
notify:
onFailure: true
channels:
- type: "telegram"
target: "${ADMIN_ID}"
案例 4:定时数据同步
# 每小时同步一次数据
tasks:
- name: "data-sync"
description: "每小时数据同步"
schedule: "0 * * * *"
skill: "data-sync"
params:
sources:
- "github"
- "jira"
- "slack"
conditions:
# 排除周末
daysOfWeek: [1, 2, 3, 4, 5]
案例 5:定时内容推送
# 每天早上 9 点推送热门内容
tasks:
- name: "daily-content-push"
description: "每日内容推送"
schedule: "0 9 * * *"
skill: "content-pusher"
params:
platforms:
- "telegram"
- "discord"
contentType: "trending"
案例 6:定时清理任务
# 每天凌晨 3 点清理过期数据
tasks:
- name: "cleanup-expired"
description: "清理过期数据"
schedule: "0 3 * * *"
skill: "data-cleanup"
params:
retentionDays: 30
targets:
- "logs"
- "cache"
- "temp_files"
案例 7:定时备份
# 每天凌晨 2 点备份数据
tasks:
- name: "daily-backup"
description: "每日数据备份"
schedule: "0 2 * * *"
skill: "backup-manager"
params:
targets:
- "database"
- "configs"
destination: "s3://backup-bucket"
retention: 7
Cron 高级配置
1. 多个 Cron 表达式
tasks:
- name: "multi-trigger-task"
schedule:
- "0 9 * * *" # 早上 9 点
- "0 14 * * *" # 下午 2 点
- "0 18 * * *" # 下午 6 点
skill: "reminder"
2. 动态参数
tasks:
- name: "dynamic-task"
schedule: "0 8 * * *"
skill: "dynamic-reporter"
# 使用环境变量或动态值
params:
recipients: "${REPORT_RECIPIENTS}"
threshold: "${NOTIFICATION_THRESHOLD}"
3. 任务依赖
tasks:
- name: "task-a"
schedule: "0 8 * * *"
skill: "task-a"
output:
key: "result_a"
- name: "task-b"
schedule: "0 9 * * *"
skill: "task-b"
dependsOn:
- "task-a"
input:
from: "result_a"
4. 手动触发
除了自动执行,你也可以手动触发定时任务:
# 手动触发某个任务
openclaw cron run daily-report
# 手动触发所有任务
openclaw cron run all
监控与调试
查看任务状态
# 查看所有任务状态
openclaw cron list
# 查看特定任务详情
openclaw cron status daily-report
# 查看任务执行历史
openclaw cron history daily-report --limit 10
日志管理
# config/cron.yaml
settings:
logging:
level: "info"
# 日志保留天数
retentionDays: 30
# 日志文件路径
logFile: "./logs/cron.log"
告警配置
tasks:
- name: "critical-task"
schedule: "0 * * * *"
skill: "critical-task"
alert:
enabled: true
# 连续失败次数阈值
failureThreshold: 3
channels:
- type: "telegram"
target: "${ADMIN_ID}"
- type: "email"
target: "admin@example.com"
常见问题
问题 1:任务不执行
检查: - Cron 表达式是否正确 - 任务是否启用(enabled: true) - 服务是否正常运行 - 时区设置是否正确
问题 2:任务执行时间不准
可能原因: - 时区设置错误 - 系统时间不准确 - 任务执行时间过长
解决方案:
- 检查 timezone 设置
- 同步系统时间
- 优化任务执行时间
问题 3:任务重复执行
可能原因: - 多个实例运行 - 重试机制触发
解决方案: - 检查是否启动了多个实例 - 配置任务锁
问题 4:任务超时
解决方案: - 增加超时配置 - 优化任务逻辑 - 拆分大任务为小任务
最佳实践
1. 合理设置执行时间
- 避开高峰期(如早上 9 点)
- 重要任务设置重试
- 长时间任务设置超时
2. 错误处理
tasks:
- name: "robust-task"
schedule: "0 8 * * *"
skill: "robust-task"
retry:
enabled: true
maxAttempts: 3
delay: 60000
3. 通知机制
notify:
onSuccess: false # 成功不通知
onFailure: true # 失败通知
channels:
- type: "telegram"
target: "${ADMIN_ID}"
4. 任务分组
# 按功能分组
groups:
- name: "reports"
tasks:
- "daily-report"
- "weekly-summary"
- name: "maintenance"
tasks:
- "health-check"
- "cleanup-expired"
总结
OpenClaw 的 Cron 定时任务功能让自动化变得更加简单:
- ✅ 灵活调度:支持标准 Cron 表达式
- ✅ 多种触发:定时、间隔、动态
- ✅ 错误处理:重试、超时、告警
- ✅ 监控日志:完整执行记录
通过合理使用定时任务,你可以让 AI 自动完成各种重复性工作,大幅提升效率。
相关阅读: - OpenClaw 自动化工作流 - OpenClaw 技能开发 - OpenClaw 最佳实践