半夜3点磁盘满了,早上9点选题推荐准时推送——这些都不是我干的,是我的AI定时任务替我干的。
先说结论
AI Agent的cron定时任务,和传统的 crontab 不是一回事。
传统cron是"到点跑命令",AI Agent的cron是**“到点唤醒一个AI帮你思考和执行”**。它能搜索、能分析、能写文件、能推送到微信。
两种模式:脚本直出(零token消耗,纯数据采集)和Agent模式(有推理能力,会做判断。token可以理解为AI思考和输出的计费单位)。选型一句话:固定格式用脚本,需要思考的用Agent。
传统cron到底差在哪
先看一张对比:
| 维度 | 传统crontab | AI Agent cron |
|---|---|---|
| 能力 | 执行固定命令 | 执行+推理+搜索+写文件 |
| 输出 | 发邮件,没人看 | 推到微信/Telegram |
| 上下文 | 无 | 可注入skill、记忆、历史 |
| 智能程度 | 零 | 能判断"没事别烦我" |
| 失败处理 | 写个error日志 | 分析原因、换方案重试 |
传统cron最大的问题不是功能弱,而是输出没人看。crontab每天给你发邮件,你打开过吗?
AI Agent的cron不一样——它直接推到你的聊天工具,而且只在有事的时候才推。
两种模式
A. 脚本直出(no_agent模式)
原理很简单:bash/python脚本跑完 → stdout → 直接推送到你的聊天窗口。
不经过LLM,零token消耗。
我配了一个系统健康巡查脚本,每天8:00和22:00自动跑,输出长这样:
| |
这个脚本做了什么?
- 检查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
| |
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,就会"消失"。确保每种情况都有输出。
怎么选
一句话决策树:
| |
写在最后
AI Agent的cron,本质上是把"定时执行"升级为**“定时思考”**——不是到点跑命令,而是到点让AI帮你做决策。
不在线的时候,有人在替你盯着。