Hermes Agentcron调度自动化

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>   # 删除废弃任务

常见问题

任务没执行?

  1. 检查调度器是否运行:hermes cron status
  2. 检查任务状态:hermes cron list
  3. 查看错误日志:grep -i error ~/.hermes/logs/agent.log

任务执行了但没收到推送?

检查推送目标是否配置正确:

hermes config check

确认 home channel 设置无误。

多个任务同时跑会冲突?

Hermes 的任务调度器会排队执行,不会同时触发。但如果两个任务依赖同一份数据,建议用 --context-from 建立依赖链。

小结

cron 调度是 Agent 自动化的核心能力。它把”手动下指令”变成了”系统自动运行”,让 Agent 从被动工具变成主动助手。

关键要点:

  1. 简单开始——先手动跑通任务,再转成 cron
  2. 逐步进阶——单任务 → 多任务 → 任务链 → no_agent
  3. 持续优化——根据实际运行情况调整时间和频率

本文是 Agent 学习路径的第 3 步。下一步:技能开发:用 Skill 扩展 Agent 能力边界 →

💬 评论