cron 调度:让 Hermes Agent 每天自动干活
为什么要用 cron 调度
手动给 Agent 下指令很方便,但真正的效率来自自动执行。
cron 调度让 Agent:
- ⏰ 定点干活——每天早上 6 点巡检,开盘前出报告
- 🔄 循环执行——每 30 分钟检查一次数据更新
- 📬 自动推送——结果自动发送到飞书/微信
- 🎯 管好自己——即使你不在电脑前,Agent 也在后台工作
第一个 cron 任务
最简单的创建方式
在对话中直接说:
创建一个 cron 任务,每天早上 6 点执行早间系统巡检,结果发到飞书
Agent 会自动帮你配置好。但为了更好理解,我们一步步来。
用 CLI 创建
hermes cron create "0 6 * * *" --prompt "执行系统巡检:检查磁盘、数据完整性和网关状态,汇总报告"
⏰
"0 6 * * *"是标准 cron 表达式:每天 6:00
Hermes 还支持更易读的写法:
hermes cron create "every 30m" # 每 30 分钟
hermes cron create "0 9 * * *" # 每天 9:00
hermes cron create "2026-07-01T09:00:00" # 一次性定时
查看和管理任务
hermes cron list # 查看所有任务
hermes cron status # 查看调度器状态
hermes cron pause ID # 暂停某个任务
hermes cron resume ID # 恢复
hermes cron remove ID # 删除
hermes cron run ID # 立即执行一次
cron 表达式速查
┌───────── 分钟 (0-59)
│ ┌──────── 小时 (0-23)
│ │ ┌─────── 日 (1-31)
│ │ │ ┌────── 月 (1-12)
│ │ │ │ ┌───── 星期 (0-7, 0和7=周日)
│ │ │ │ │
* * * * *
常用示例:
| 表达式 | 含义 |
|---|---|
0 6 * * * | 每天 6:00 |
30 9 * * 1-5 | 工作日 9:30 |
*/15 * * * * | 每 15 分钟 |
0 9,15 * * * | 每天 9:00 和 15:00 |
0 0 * * 0 | 每周日午夜 |
定时任务实战
场景一:每日数据下载
hermes cron create "0 1 * * *" \
--name "增量数据下载" \
--prompt "执行增量数据下载:从 pytdx 拉取今日行情数据,导入 DuckDB,汇报结果" \
--deliver feishu
场景二:每周策略回顾
hermes cron create "0 9 * * 1" \
--name "周策略回顾" \
--prompt "回测所有活跃策略,对比上周表现,生成周报" \
--deliver feishu
场景三:收盘后生成日报
hermes cron create "30 15 * * 1-5" \
--name "收盘日报" \
--prompt "下载今日收盘数据,计算各策略当日收益,生成日报发送" \
--deliver feishu
高级用法
技能 + cron 组合
让任务加载特定技能,执行更专业:
hermes cron create "0 6 * * *" \
--name "全市场估值周报" \
--prompt "执行全市场估值分析周报并发送到飞书" \
--skills quant-morning-check,wind-report-generator
这样 cron 执行时会先加载这些技能,再执行任务。
no_agent 轻量模式
对于纯脚本执行(不需要 LLM 推理),可以用 no_agent 模式——不走 Agent 循环,直接跑脚本,节省 tokens:
# 创建 wrapper 脚本
cat > ~/.hermes/scripts/disk_check.sh << 'EOF'
#!/bin/bash
set -euo pipefail
echo "磁盘检查:"
df -h / /mnt/c /mnt/d | tail -3
echo "进程检查:"
ps aux | grep hermes | grep -v grep | wc -l
EOF
chmod +x ~/.hermes/scripts/disk_check.sh
然后用 cronjob 工具创建:
# 在 Agent 对话中创建
cronjob(
action='create',
name='磁盘巡检',
schedule='0 */2 * * *',
script='disk_check.sh',
no_agent=True,
deliver='local'
)
no_agent 模式的好处:
- 零 token 消耗——不调用 LLM
- 启动快——毫秒级
- 输出即消息——脚本 stdout 就是推送内容
任务链:前一个输出作为后一个的输入
# 先创建数据下载任务
hermes cron create "0 1 * * *" \
--name "数据下载" \
--prompt "下载今日数据"
# 再创建分析任务,以上一个任务的结果为上下文
hermes cron create "0 6 * * *" \
--name "数据分析" \
--context-from <数据下载的job_id> \
--prompt "基于最新数据分析..."
管理最佳实践
命名规范
好的命名让你一眼知道这个任务是干什么的:
# ✅ 好的命名
--name "每日数据下载(pytdx)→DuckDB"
--name "早间系统巡检+报告"
--name "每周全市场估值分析"
# ❌ 避免
--name "task1"
设置合理的超时
数据下载、回测等耗时任务,设长一些的超时:
# 在 cron 创建时 model 参数里设
--model auto # 不影响,但单个 cron 可以单独配置超时
Hermes cron 默认超时 1800s(30 分钟),对于数据下载等任务一般是够的。
推送目标的灵活配置
--deliver feishu # 发送到飞书
--deliver local # 只保存到本地文件
--deliver 'all' # 发送到所有已连接平台
维护和清理
hermes cron list # 定期查看任务列表
hermes cron pause <job_id> # 临时停用不需要的任务
hermes cron remove <job_id> # 删除废弃任务
常见问题
任务没执行?
- 检查调度器是否运行:
hermes cron status - 检查任务状态:
hermes cron list - 查看错误日志:
grep -i error ~/.hermes/logs/agent.log
任务执行了但没收到推送?
检查推送目标是否配置正确:
hermes config check
确认 home channel 设置无误。
多个任务同时跑会冲突?
Hermes 的任务调度器会排队执行,不会同时触发。但如果两个任务依赖同一份数据,建议用 --context-from 建立依赖链。
小结
cron 调度是 Agent 自动化的核心能力。它把”手动下指令”变成了”系统自动运行”,让 Agent 从被动工具变成主动助手。
关键要点:
- 简单开始——先手动跑通任务,再转成 cron
- 逐步进阶——单任务 → 多任务 → 任务链 → no_agent
- 持续优化——根据实际运行情况调整时间和频率
本文是 Agent 学习路径的第 3 步。下一步:技能开发:用 Skill 扩展 Agent 能力边界 →