AI Agent 的定时任务:从「到点跑命令」到「到点帮你思考」

深入解析 Hermes Agent 的 cron 定时任务系统:脚本直出模式零 token 消耗,Agent 模式具备搜索、分析、决策能力。静默机制避免告警疲劳,链式执行实现任务编排。从系统健康巡查到公众号选题推荐,完整配置指南与踩坑实录。

半夜3点磁盘满了,早上9点选题推荐准时推送——这些都不是我干的,是我的AI定时任务替我干的。

先说结论

AI Agent的cron定时任务,和传统的 crontab 不是一回事。

传统cron是"到点跑命令",AI Agent的cron是**“到点唤醒一个AI帮你思考和执行”**。它能搜索、能分析、能写文件、能推送到微信。

两种模式:脚本直出(零token消耗,纯数据采集)和Agent模式(有推理能力,会做判断。token可以理解为AI思考和输出的计费单位)。选型一句话:固定格式用脚本,需要思考的用Agent。

传统cron到底差在哪

先看一张对比:

维度传统crontabAI Agent cron
能力执行固定命令执行+推理+搜索+写文件
输出发邮件,没人看推到微信/Telegram
上下文可注入skill、记忆、历史
智能程度能判断"没事别烦我"
失败处理写个error日志分析原因、换方案重试

传统cron最大的问题不是功能弱,而是输出没人看。crontab每天给你发邮件,你打开过吗?

AI Agent的cron不一样——它直接推到你的聊天工具,而且只在有事的时候才推。

两种模式

A. 脚本直出(no_agent模式)

原理很简单:bash/python脚本跑完 → stdout → 直接推送到你的聊天窗口。

不经过LLM,零token消耗。

我配了一个系统健康巡查脚本,每天8:00和22:00自动跑,输出长这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
## 🟢 系统巡查报告

时间: 2026-05-12 08:01 | 运行: 3天23小时 | 负载: 0.06

资源
| 指标   | 数值              | 状态 |
|--------|-------------------|------|
| CPU    | 3%                | ✅   |
| 内存   | 2268M/32131M (7%) | ✅   |
| Swap   | 0M/7823M          | ✅   |
| 磁盘/  | 42G/140G (32%)    | ✅   |

服务: sshd ✅ | AI助手 ✅
网络: 百度 ✅ | Google ✅

这个脚本做了什么?

  • 检查CPU/内存/Swap/磁盘,超阈值标⚠️
  • 检查关键服务是否活着(sshd、cron、AI进程)
  • 测试国内外网络连通性(ping + HTTP)
  • 拉最近1小时系统错误日志
  • 任何一项异常,标题从🟢变⚠️

全部健康就一条消息,有异常自动高亮。每天看一眼就行。

适合场景:监控告警、固定格式数据采集、定期备份验证。核心特征是输出格式固定,不需要AI判断

B. Agent模式

这个才是真正有意思的。

原理:定时唤醒 → 加载你写的prompt → AI推理 → 调用工具(搜索、终端、文件) → 生成报告 → 推送给你。

消耗token,但有"脑子"。

比如我的公众号选题推荐,每周二9:00自动执行。它的信息采集分四个维度:

  • 维度1:我最近做了什么(读cron状态、最近skill、产出文件、AI记忆)
  • 维度2:我的系统最新更新了什么(搜GitHub release/changelog)
  • 维度3:外面在我的系统上都在聊什么(Reddit/HN/掘金/知乎)
  • 维度4:外面在聊什么(本周AI热点动态)

它会先读本地环境(最近装了什么、配了什么),再搜外部热点,然后找两者的交集。出来的选题不是泛泛的"AI时代来了",而是"我刚装了RTK省了80% token"这种实操内容。

适合场景:需要搜索分析、需要综合判断、需要阅读本地文件的场景。核心特征是每次输出不一样,需要AI"思考"

一个关键设计:静默机制

Agent模式有个 [SILENT] 机制——如果AI判断"确实没什么新东西",它回复一个静默标记,系统就不推送。

这个设计太重要了。

传统监控最怕的是什么?告警疲劳。天天给你发"一切正常",你就不看了。突然有一天"不正常"了,你早就把它当噪音过滤掉了。

静默机制反过来:没事别烦我,有事才说话。 你的聊天窗口只出现真正需要关注的信息。

从0配置一个cron job

以健康巡查为例,完整流程:

Step 1:写脚本

~/.hermes/scripts/health-check.sh,用bash采集系统信息,输出Markdown表格。关键点:

  • set -uo pipefail 防止静默失败
  • 设置阈值判断(CPU>80% ⚠️、内存>85% ⚠️)
  • 输出格式统一(Markdown表格,方便在聊天窗口阅读)

Step 2:创建cron

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 脚本模式
cronjob create \
  --name "系统健康巡查" \
  --script "health-check.sh" \
  --no-agent \
  --schedule "0 8,22 * * *" \
  --deliver origin

# Agent模式
cronjob create \
  --name "公众号选题推荐" \
  --prompt "你的prompt..." \
  --toolsets web,terminal,file \
  --schedule "0 9 * * 2" \
  --deliver origin

Step 3:验证

所有执行记录存在cron的output目录下,按时间命名。随时可以回查。

进阶玩法

  • 链式执行:job A采集数据 → job B分析报告(A跑完自动触发B)。用 context_from 参数把上游输出注入下游。比如:健康巡查发现异常 → 自动触发诊断任务分析原因。
  • 模型锁定:每个job可以指定不同模型。省钱的数据采集用小模型,重要的分析任务用大模型。
  • 目录隔离:不同job可以指定不同的工作目录(workdir),互不干扰。

踩坑实录

1. skill找不到

cron执行环境是独立的,不像主对话有完整的skill列表。解决方案:把需要的能力写在 enabled_toolsets 里(web/terminal/file)。

2. 纯数据采集用了Agent模式

固定格式的数据采集(比如健康检查),用Agent模式是纯浪费token。能用脚本解决的别用Agent。

3. 输出太长被截断

微信单条消息有长度限制。设计prompt时加一句"输出控制在500字以内",或者脚本里精简格式。

4. 时区

schedule用的是系统时区。服务器在国内就不用管,在海外记得设 TZ=Asia/Shanghai

5. 静默不等于失败

脚本模式下,stdout为空 = 不推送。如果你的脚本某个分支忘了echo,就会"消失"。确保每种情况都有输出。

怎么选

一句话决策树:

1
2
3
4
5
6
7
需要AI判断吗
├── 不需要  脚本直出(no_agent=true
   └── 监控、采集、固定格式报告
└── 需要  Agent模式
    ├── 搜索+分析  toolsets加web
    ├── 读本地文件  toolsets加terminal+file
    └── 两个都要  都加上

写在最后

AI Agent的cron,本质上是把"定时执行"升级为**“定时思考”**——不是到点跑命令,而是到点让AI帮你做决策。

不在线的时候,有人在替你盯着。