OpenClaw 定时任务与Cron自动化

让你的Agent 7×24小时自动运行

前言:比老板还勤快的Agent

凌晨1点。凌晨2点。凌晨3点。你睡着了,但你的Agent没睡。它还在生成SEO页面、搜索AI新闻、更新竞品报告。

这就是cron定时任务的力量。这篇教程教你如何让Agent像守护进程一样,7×24小时不间断地工作。

OpenClaw Cron 系统

OpenClaw的cron系统通过定时触发Agent会话来执行任务。任务触发时会附带一个cron标记,让你可以区分是定时任务还是用户交互触发的。

核心原理:cron触发 → 新建/恢复会话 → 发送预设prompt → Agent执行任务 → 结果通知

Cron 表达式基础

# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 日期 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 星期 (0 - 6, 0=周日)
# │ │ │ │ │
# * * * * *
表达式 含义 用途
0 1 * * * 每天凌晨1点 大规模SEO生成
0 */2 * * * 每2小时 RSS内容聚合
0 8 * * * 每天早上8点 AI新闻日报
0 0 * * 5 每周五午夜 周报汇总
0 6 * * 1-5 工作日早上6点 GitHub自动化
0 23 * * * 每天晚上11点 内链优化

妙趣AI的定时任务矩阵

01:00

大规模SEO内容生成

02:00

SEO巡检(死链/meta/sitemap)

03:00

竞品监控分析

04:00

AI术语百科生成

06:00

GitHub自动化运营

08:00

AI新闻日报生成

12:00 / 18:00

热点追踪(每日3次)

22:00

每日营销报告

定时任务最佳实践

1. 错峰执行

把重型任务安排在凌晨,避免影响用户交互。SEO批量生成放01:00,巡检放02:00,竞品分析放03:00。

2. 留出间隔

任务之间至少间隔30分钟,给系统喘息的空间。不要两个重型任务同时跑。

3. 健康检查

// 在定时任务中加入健康检查
async function cronTask() {
  const start = Date.now();
  try {
    // 执行核心任务
    await executeTask();
    
    // 记录成功日志
    log(`任务成功完成,耗时 ${Date.now() - start}ms`);
  } catch (error) {
    // 错误通知
    log(`任务失败: ${error.message}`);
    await notifyAdmin(`任务失败: ${error.message}`);
  }
}

4. 超时保护

每个定时任务都应该有超时保护,防止任务卡死导致后续任务排队:

// 设置任务超时
const timeout = 60 * 60 * 1000; // 1小时

const result = await Promise.race([
  executeTask(),
  new Promise((_, reject) => 
    setTimeout(() => reject(new Error("任务超时")), timeout)
  )
]);

5. 幂等性设计

定时任务可能重复触发(如系统重启)。设计任务时要保证幂等性——执行多次和执行一次结果相同:

妙趣AI实践:我们的SEO生成任务每天凌晨1点运行。在生成前会检查当天是否已生成过页面(通过文件名日期判断),避免重复生成。

Gateway 守护进程

OpenClaw的Gateway是核心守护进程,负责调度定时任务和管理Agent会话:

# 查看Gateway状态
openclaw gateway status

# 启动Gateway
openclaw gateway start

# 停止Gateway
openclaw gateway stop

# 重启Gateway
openclaw gateway restart
重要:如果Gateway挂了,所有定时任务都会停止。建议配置系统级守护(systemd)确保Gateway自动重启。

QQ Bot 定时提醒

OpenClaw还支持QQ Bot定时提醒,通过qqbot_remind工具实现:

// 创建一次性提醒(5分钟后)
await qqbot_remind({
  action: "add",
  content: "记得喝水",
  time: "5m"
});

// 创建周期提醒(每天8点)
await qqbot_remind({
  action: "add",
  content: "每日晨会",
  time: "0 8 * * *"
});

// 查看已有提醒
await qqbot_remind({ action: "list" });

// 删除提醒
await qqbot_remind({
  action: "remove",
  jobId: "job-id"
});

最佳实践总结

  1. 错峰执行:重型任务安排在凌晨
  2. 留出间隔:任务之间至少30分钟
  3. 超时保护:每个任务都有最大运行时间
  4. 幂等设计:重复执行不会产生副作用
  5. 日志记录:每次执行记录开始/结束时间
  6. 异常通知:失败时自动通知管理员
  7. Gateway守护:确保核心进程不挂