博客
文章系列日历
归档关于搜索

鄂ICP备19019526号

© 2026 博客

  1. 文章
  2. Hermes-Agent系列
  3. Cron 定时任务——用自然语言设置自动化

Cron 定时任务——用自然语言设置自动化

2026年5月11日·约 9 分钟·2687 字·69 次阅读·系列第 6/10 篇
Hermes-Agent系列 · 第 6 篇Hermes Agent
Hermes-Agent系列·第 6 篇,共 10 篇
上一篇 · Skills 系统深度解剖——掌握 Hermes Agent 的技能生态下一篇 · MLOps 与研究能力——Hermes Agent 的隐藏王炸
Cron 定时任务——用自然语言设置自动化

目录

  • 一、Cron 调度器设计理念
  • 1.1 传统 Cron 的痛点
  • 1.2 Hermes Agent 的解决方案
  • 1.3 技术架构
  • 二、基本用法详解
  • 2.1 创建任务的四种方式
  • 2.2 查看与管理任务
  • 2.3 删除与修改任务
  • 三、时间描述语法详解
  • 3.1 自然语言解析规则
  • 3.2 常见时间模式对照表
  • 3.3 相对时间(一次性任务)
  • 3.4 高级时间模式
  • 四、平台投递详解
  • 4.1 支持的平台
  • 4.2 平台特定配置
  • 4.3 多平台同时推送
  • 五、常用场景深度实战
  • 5.1 每日站会简报
  • 5.2 夜间代码备份
  • 5.3 每周技术债务审计
  • 5.4 定时健康检查
  • 5.5 股票价格监控
  • 5.6 日报/周报自动生成
  • 六、多任务编排
  • 6.1 依赖链执行
  • 6.2 并行执行
  • 6.3 条件分支
  • 七、状态持久化与恢复
  • 7.1 任务状态存储
  • 7.2 重启恢复机制
  • 7.3 执行状态追踪
  • 八、监控与日志
  • 8.1 执行日志查看
  • 8.2 统计面板
  • 8.3 调试模式
  • 九、高级配置
  • 9.1 直接使用 Cron 表达式
  • 9.2 条件执行
  • 9.3 失败重试策略
  • 9.4 超时控制
  • 9.5 速率限制
  • 十、故障排查
  • 10.1 常见问题
  • 10.2 调试命令
  • 十一、命令汇总
  • 11.1 CLI 命令
  • 11.2 对话命令
  • 十二、总结

Cron 定时任务——用自然语言设置自动化

"每天早上9点推送今日天气报告"——一句话搞定自动化。

Hermes Agent 内置强大的 cron 调度器,可以用自然语言描述任务,然后定时推送到任意平台。与传统需要记忆复杂表达式的 cron 不同,Hermes Agent 让你用日常语言描述需求,系统自动解析并创建定时任务。这篇详细介绍 Cron 定时任务的使用方法和高级技巧。


一、Cron 调度器设计理念

1.1 传统 Cron 的痛点

传统 Unix cron 需要记忆复杂的表达式:

# 语法:分 时 日 月 周 命令
0 9 * * * /usr/local/bin/send_weather_report.sh
0 */2 * * * /usr/local/bin/health_check.sh
0 9 * * 1-5 /usr/local/bin/daily_standup.sh

传统 Cron 的问题:

  • 语法晦涩难记
  • 无法描述复杂时间逻辑
  • 难以处理"工作日早上9点"这类模糊表达
  • 任务失败无智能重试
  • 没有内置的消息推送

1.2 Hermes Agent 的解决方案

Hermes Agent 的自然语言 cron 解析:

用户:帮我设置一个定时任务:每天早上9点推送今日天气报告

Hermes:
1. 解析时间:"每天早上9点" → cron: 0 9 * * *
2. 确认任务内容:获取天气报告
3. 确定推送目标:当前对话平台 (Telegram)
4. 创建任务:✅ 任务已创建

核心优势:

特性传统 CronHermes Cron
时间描述记忆表达式自然语言
任务内容Shell 脚本AI 技能
推送方式邮件/日志多平台推送
失败处理无智能重试
依赖管理手动自动编排

1.3 技术架构

┌─────────────────────────────────────────────────────────┐
│                    Hermes Agent Core                     │
├─────────────────────────────────────────────────────────┤
│  Cron Scheduler                                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐    │
│  │ 时间解析器   │  │ 任务编排器   │  │ 执行引擎    │    │
│  │ (自然语言)   │  │ (依赖+并行)  │  │ (技能调用)  │    │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘    │
└─────────┼────────────────┼────────────────┼─────────────┘
          │                │                │
          ▼                ▼                ▼
    ┌───────────┐   ┌───────────┐   ┌───────────┐
    │  任务队列  │──▶│ 执行单元  │──▶│  推送适配 │
    │  (Redis)  │   │ (Worker)  │   │  器       │
    └───────────┘   └───────────┘   └───────────┘
                                              │
                    ┌──────────────┬──────────┴──────────┐
                    ▼              ▼                      ▼
               Telegram      Discord                  Slack

二、基本用法详解

2.1 创建任务的四种方式

方式一:对话式创建(最常用)

用户:帮我设置一个定时任务,每天早上9点推送今日天气报告

Hermes:
✅ 任务已创建!

📅 时间:每天 09:00
📋 内容:获取天气报告
📮 推送:Telegram (@你的Bot)
🆔 任务ID:task_weather_daily

回复"取消这个任务"可删除

方式二:明确指定平台

每天早上9点,推送天气报告到 Discord #general 频道

方式三:多任务组合

每天早上9点:先检查天气,然后查询股票行情,最后生成简报

方式四:条件触发

每小时检查服务器状态,如果 CPU > 80% 则发送告警

2.2 查看与管理任务

列出所有任务:

/hermes cron list

输出示例:

📅 定时任务列表 (共 5 个)

┌────────────────────┬──────────────┬────────────┬────────┐
│ 任务名称           │ 时间         │ 平台       │ 状态   │
├────────────────────┼──────────────┼────────────┼────────┤
│ daily-weather      │ 每天 09:00   │ Telegram   │ ✅ 活跃│
│ hourly-health      │ 每小时       │ Discord    │ ✅ 活跃│
│ weekly-report      │ 周一 10:00   │ Slack      │ ✅ 活跃│
│ stock-alert        │ 工作日 09:30 │ Telegram   │ ⏸️ 暂停│
│ backup-night       │ 每天 02:00   │ CLI        │ ✅ 活跃│
└────────────────────┴──────────────┴────────────┴────────┘

查看单个任务详情:

查看 daily-weather 任务的详情

输出:

📋 任务详情:daily-weather

⏰ 执行计划:每天 09:00 (cron: 0 9 * * *)
📮 推送目标:Telegram (@HermesWeatherBot)
📝 执行技能:get-weather-report
🔄 重试策略:失败重试 3 次,间隔 5 分钟
📊 统计:
  - 总执行:45 次
  - 成功:43 次 (95.6%)
  - 失败:2 次
  - 最后执行:2026-05-10 09:00:15
  - 下次执行:2026-05-11 09:00:00

2.3 删除与修改任务

删除任务:

取消每天早上9点的天气报告任务

或:

/hermes cron remove daily-weather

暂停任务:

暂停 stock-alert 任务

恢复任务:

恢复 stock-alert 任务

修改任务时间:

把这个任务的执行时间改到每天早上10点

三、时间描述语法详解

3.1 自然语言解析规则

Hermes Agent 的时间解析器使用语义理解而非简单正则匹配:

输入:每天早上9点
解析:
  - "每天" → 周期:daily
  - "早上9点" → 时间:09:00
  - 结果:cron 0 9 * * *

输入:工作日上午9点30分
解析:
  - "工作日" → 周一到周五
  - "9点30分" → 09:30
  - 结果:cron 30 9 * * 1-5

输入:每月1号下午3点
解析:
  - "每月1号" → 每月1日
  - "下午3点" → 15:00
  - 结果:cron 0 15 1 * *

3.2 常见时间模式对照表

自然语言描述解析结果Cron 表达式
每天早上9点每天 09:000 9 * * *
每天下午3点每天 15:000 15 * * *
每小时每小时整点0 * * * *
每30分钟每30分钟*/30 * * * *
每周一早上每周一 09:000 9 * * 1
每周一至周五早上工作日 09:000 9 * * 1-5
每周六周日早上周末 09:000 9 * * 0,6
每月1号每月1日 00:000 0 1 * *
每月15号下午每月15日 14:000 14 15 * *
每年1月1号每年1月1日 00:000 0 1 1 *
每天凌晨2点每天 02:000 2 * * *
工作日下午6点周一至周五 18:000 18 * * 1-5

3.3 相对时间(一次性任务)

描述解析用途
5分钟后当前时间 + 5分钟延时提醒
1小时后当前时间 + 1小时延时任务
明天早上明天 09:00定时提醒
下周一下周一 09:00会议提醒
下个月1号下月1日 00:00月末提醒

3.4 高级时间模式

复杂时间描述:

每隔2小时
→ cron: 0 */2 * * *

每45分钟
→ cron: */45 * * * *

每天9点到18点每小时
→ cron: 0 9-18 * * *

工作日9点到12点每30分钟
→ cron: */30 9-12 * * 1-5

每月最后一个周五
→ cron: 0 15 * * 5L

四、平台投递详解

4.1 支持的平台

平台状态特殊功能
Telegram✅ 稳定支持 Markdown/HTML、Keyboard
Discord✅ 稳定支持 Embed、Webhook
Slack✅ 稳定支持 Block Kit
WhatsApp🧪 预览模板消息
Email (SMTP)✅ 稳定HTML 邮件
Webhook✅ 稳定自定义 HTTP 回调
CLI✅ 稳定本地执行脚本

4.2 平台特定配置

Telegram 配置:

telegram:
  # 支持 MarkdownV2 和 HTML
  parse_mode: "HTML"
  # 自定义键盘
  reply_markup:
    keyboard:
      - ["📊 查看统计", "⚙️ 设置"]
      - ["❓ 帮助"]
  # 禁用网页预览
  disable_web_page_preview: true

Discord Embed:

discord:
  # Embed 样式
  embed:
    title: "📊 {{task_name}} 执行报告"
    color: 5814783  # 绿色
    fields:
      - name: "执行时间"
        value: "{{timestamp}}"
      - name: "状态"
        value: "{{status}}"
    footer:
      text: "Hermes Agent Cron"

Slack Block Kit:

slack:
  blocks:
    - type: "section"
      text:
        type: "mrkdwn"
        text: "📊 *{{task_name}}* 执行报告"
    - type: "divider"
    - type: "context"
      elements:
        - type: "mrkdwn"
          text: "执行时间: {{timestamp}}"

4.3 多平台同时推送

每天早上9点,同时推送天气报告到 Telegram 和 Slack #general

配置:

task:
  name: "daily-weather-multi"
  skill: "get-weather-report"
  schedule: "0 9 * * *"
  targets:
    - platform: "telegram"
      chat_id: "@weather_channel"
    - platform: "discord"
      channel_id: "123456789"
      webhook: "custom-webhook-url"
    - platform: "slack"
      channel: "#general"

五、常用场景深度实战

5.1 每日站会简报

需求: 每天早上 10 点汇总昨天 GitHub commits,推送到 Slack

创建方式:

每天早上10点,汇总昨天的 GitHub commits 并推送到 Slack #dev-team 频道

Hermes 自动执行:

  1. 调用 GitHub API 获取用户 commits
  2. 按仓库分组汇总
  3. 生成 Markdown 格式简报
  4. 推送到 Slack

输出示例:

📊 2026-05-10 GitHub Commits 汇总

🏠 home-frontend
  - fix: 修复用户登录状态丢失问题 (#234)
  - feat: 添加暗黑模式切换 (#233)
  
🏠 api-service
  - refactor: 重构用户认证模块 (#456)
  - test: 添加单元测试 (#455)

📈 今日统计:5 commits, 2 PRs

5.2 夜间代码备份

需求: 每天凌晨 2 点备份项目到 S3

每天凌晨2点,备份 ~/projects 目录到 S3 bucket-backup

执行流程:

  1. 创建项目 tarball(排除 node_modules、.git)
  2. 上传到 S3(带日期前缀)
  3. 保留最近 7 份备份
  4. 发送备份报告到 Telegram

S3 配置:

task:
  name: "nightly-backup"
  schedule: "0 2 * * *"
  skill: "s3-backup"
  config:
    source: "~/projects"
    bucket: "my-backup-bucket"
    retention: 7  # 保留7天
    exclude:
      - "node_modules"
      - ".git"
      - "*.log"

5.3 每周技术债务审计

需求: 每周一早上检查项目中的 TODO 和 FIXME

每周一早上9点,检查项目中的 TODO 和 FIXME,生成报告推送到 Discord

执行内容:

  1. 搜索所有代码文件中的 TODO、FIXME、HACK、XXX 注释
  2. 按严重程度分类
  3. 生成报告(按文件、标签分组)
  4. 推送到 Discord

输出示例:

📋 技术债务审计报告 - 2026-05-05

🔴 高优先级 (3)
  src/auth/login.ts:42 - TODO: 替换为 OAuth2
  src/payment/api.ts:128 - FIXME: 处理超时异常
  tests/unit/auth.test.ts:15 - HACK: 临时绕过验证
  
🟡 中优先级 (7)
  src/utils/format.ts:22 - TODO: 添加单元测试
  ...
  
📊 趋势:相比上周 +2 TODO, -1 FIXME

5.4 定时健康检查

需求: 每小时检查服务器状态,异常时发送告警

每小时检查服务器状态,CPU 或内存超过 80% 时发送告警到 Telegram

配置:

task:
  name: "hourly-health"
  schedule: "0 * * * *"
  skill: "health-check"
  condition: "cpu > 80 OR memory > 80"
  targets:
    - platform: "telegram"
      chat_id: "@admin_channel"

告警内容:

⚠️ 服务器告警

🖥️ server-1
  CPU: 92% 🔴
  内存: 67% 🟡
  磁盘: 45% 🟢
  
⏰ 检测时间: 2026-05-11 10:00:03

5.5 股票价格监控

需求: 工作日上午 9:30 检查关注的股票价格

工作日上午9:30,检查 AAPL、GOOGL、MSFT 股票价格,推送变动摘要

配置:

task:
  name: "stock-morning"
  schedule: "30 9 * * 1-5"
  skill: "stock-checker"
  config:
    symbols: ["AAPL", "GOOGL", "MSFT"]
    threshold: 2  # 变动超过 2% 才提醒

5.6 日报/周报自动生成

需求: 每天下午 6 点生成工作日报

每天下午6点,汇总我今天的日程、邮件、任务完成情况,生成日报

执行流程:

  1. 调用日历 API 获取今日会议
  2. 调用邮件 API 获取未读邮件
  3. 查询任务管理工具的完成记录
  4. 生成结构化日报
  5. 推送到指定平台

六、多任务编排

6.1 依赖链执行

场景: 任务 B 需要等任务 A 完成后执行

每天早上9点:
1. 先获取天气数据
2. 然后查询股票行情
3. 接着生成综合简报
4. 最后推送到 Slack

执行流程:

Task A (天气) ──┐
               ├──► Task C (生成简报) ──► Task D (推送)
Task B (股票) ──┘

配置写法:

tasks:
  - name: "morning-brief"
    chain:
      - skill: "get-weather"
        output_var: "weather_data"
      - skill: "get-stock"
        input: "${weather_data.date}"
        output_var: "stock_data"
      - skill: "generate-brief"
        input:
          weather: "${weather_data}"
          stock: "${stock_data}"
      - skill: "send-to-slack"

6.2 并行执行

场景: 多个独立任务同时执行

每天早上9点,同时执行:天气查询、股票查询、新闻聚合

配置:

task:
  name: "morning-aggregate"
  schedule: "0 9 * * *"
  parallel:
    - skill: "get-weather"
    - skill: "get-stock"
    - skill: "get-news"
  merge_type: "combine"  # 合并结果

6.3 条件分支

场景: 根据条件执行不同任务

如果天气晴朗,推送适合出行的建议;否则推送室内活动建议

配置:

task:
  name: "weather-action"
  schedule: "0 8 * * *"
  conditional:
    - condition: "weather == 'sunny'"
      then:
        - skill: "push-sunny-activities"
    - condition: "weather == 'rainy'"
      then:
        - skill: "push-indoor-activities"

七、状态持久化与恢复

7.1 任务状态存储

任务状态存储在 Redis 中:

# redis 结构
hermes:cron:tasks
  ├── task_weather_daily
  │   ├── schedule: "0 9 * * *"
  │   ├── enabled: true
  │   ├── last_run: 1715400000
  │   ├── next_run: 1715486400
  │   └── stats: {...}
  └── ...

7.2 重启恢复机制

当 Hermes Agent 重启时:

1. 系统启动
2. 加载 cron 配置
3. 扫描 Redis 中的任务
4. 检查是否有遗漏执行的任务
5. 根据配置决定是否执行遗漏任务

配置项:

cron:
  # 是否执行遗漏的任务
  recover_missed: true
  
  # 遗漏任务的最大延迟时间(秒)
  # 超过这个时间则不执行
  max_recovery_delay: 3600
  
  # 恢复时的行为
  recovery_action: "run"  # run | skip | notify

7.3 执行状态追踪

/hermes cron status

输出:

📊 Cron 执行状态

┌────────────────────┬──────────────┬────────────┬────────────┐
│ 任务               │ 上次执行      │ 下次执行    │ 状态        │
├────────────────────┼──────────────┼────────────┼────────────┤
│ daily-weather      │ 09:00:15 ✅  │ 09:00:00   │ 等待中     │
│ hourly-health      │ 10:00:03 ✅  │ 11:00:00   │ 等待中     │
│ weekly-report      │ Mon 10:00 ✅ │ Mon 10:00  │ 等待中     │
│ backup-night       │ 02:00:22 ✅  │ 02:00:00   │ 等待中     │
└────────────────────┴──────────────┴────────────┴────────────┘

内存使用: 45MB
任务队列: 2 个待执行

八、监控与日志

8.1 执行日志查看

/hermes cron logs daily-weather

输出:

📜 日志:daily-weather (最近 20 条)

┌─────────────────────┬────────┬───────────────────────────┐
│ 时间                │ 状态   │ 详情                      │
├─────────────────────┼────────┼───────────────────────────┤
│ 2026-05-11 09:00:15│ ✅ 成功│ 执行耗时: 3.2s            │
│ 2026-05-10 09:00:22│ ✅ 成功│ 执行耗时: 4.1s            │
│ 2026-05-09 09:00:18│ ✅ 成功│ 执行耗时: 2.8s            │
│ 2026-05-08 09:00:45│ ❌ 失败│ 错误: API 限流            │
│ 2026-05-08 09:05:12│ ✅ 成功│ 重试成功,执行耗时: 3.5s   │
│ ...                 │ ...    │ ...                       │
└─────────────────────┴────────┴───────────────────────────┘

8.2 统计面板

/hermes cron stats daily-weather --days 30

输出:

📊 统计:daily-weather (30 天)

执行统计:
  - 总执行:30 次
  - 成功:28 次 (93.3%)
  - 失败:2 次 (6.7%)
  
失败分析:
  - API 限流:1 次
  - 网络超时:1 次
  
性能:
  - 平均耗时:3.4s
  - 最快:2.1s
  - 最慢:8.2s
  
时间分布:
  - 09:00-09:05: 28 次
  - 09:05-09:10: 2 次 (重试)

8.3 调试模式

测试任务执行(不等待定时):

/hermes cron test daily-weather --verbose

这会立即执行任务并输出详细日志,用于调试任务配置是否正确。


九、高级配置

9.1 直接使用 Cron 表达式

如果需要精确控制:

cron_tasks:
  - name: "custom-task"
    schedule: "0 */2 * * *"  # 每2小时
    skill: "my-skill"
    platform: "telegram"
    config:
      param1: "value1"

9.2 条件执行

cron_tasks:
  - name: "alert-task"
    schedule: "0 * * * *"
    # 只有满足条件才执行
    condition: "server_status != 'ok'"
    platform: "telegram"

9.3 失败重试策略

task:
  name: "reliable-task"
  retry:
    max_attempts: 3      # 最多重试3次
    initial_delay: 60    # 首次重试延迟 60s
    max_delay: 300       # 最大延迟 5 分钟
    exponential: true    # 指数退避

9.4 超时控制

task:
  name: "timeout-task"
  timeout: 300  # 5 分钟超时
  on_timeout: "cancel"  # cancel | continue

9.5 速率限制

task:
  name: "rate-limited-task"
  rate_limit:
    max_runs: 10
    window: 3600  # 每小时最多10次

十、故障排查

10.1 常见问题

问题原因解决方案
任务不执行任务被暂停使用 /hermes cron resume
任务执行失败技能配置错误查看日志排查
消息没收到Webhook 配置错误检查平台设置
执行延迟队列积压增加 worker 数量
重复执行多实例运行检查部署配置

10.2 调试命令

# 诊断任务问题
/hermes cron doctor daily-weather

# 测试技能是否正常工作
/hermes skill test get-weather

# 查看系统日志
/hermes logs --component cron --level debug

十一、命令汇总

11.1 CLI 命令

命令功能
hermes cron add添加定时任务
hermes cron list查看任务列表
hermes cron remove <name>删除任务
hermes cron pause <name>暂停任务
hermes cron resume <name>恢复任务
hermes cron test <name>测试任务
hermes cron logs <name>查看日志
hermes cron stats <name>统计信息
hermes cron status查看状态
hermes cron doctor诊断问题

11.2 对话命令

查看我的所有定时任务
取消每天早上的天气任务
暂停 stock-alert 任务
恢复它

十二、总结

Hermes Agent 的 Cron 定时任务系统让自动化变得前所未有的简单:

  • 自然语言描述:无需记忆 cron 表达式,像说话一样描述需求
  • 多平台投递:Telegram、Discord、Slack、Email、Webhook 任意选择
  • 智能编排:依赖关系、并行执行、条件分支全部支持
  • 状态持久化:重启后自动恢复,遗漏任务智能处理
  • 完整监控:日志、统计、调试工具一应俱全

核心价值: 把"每天都要手动做的事情"变成"说一句话就能自动执行"。


系列文章预告:

  • (九)最佳实践与生态展望:日常使用最佳实践、安装配置清单、性能优化技巧、社区生态、Discord、Skills Hub、GitHub。Roadmap 与开源意义。快速查询核心命令。

你有哪些自动化需求?在评论区分享!

系列:Hermes-Agent系列

第 6 / 10 篇
  • …
  • 4. 技术架构全解析——Hermes Agent 是如何设计的
  • 5. Skills 系统深度解剖——掌握 Hermes Agent 的技能生态
  • 6. Cron 定时任务——用自然语言设置自动化
  • 7. MLOps 与研究能力——Hermes Agent 的隐藏王炸
  • 8. 最佳实践与生态展望——Hermes Agent 深度使用指南
  • …
← Skills 系统深度解剖——掌握 Hermes Agent 的技能生态MLOps 与研究能力——Hermes Agent 的隐藏王炸 →
继续阅读下一篇

评论

加载评论中…

发表评论

返回文章列表