Skip to content

定时任务

Hermes Agent 内置了定时任务系统,允许您使用自然语言描述调度计划,让智能体在指定时间自动执行任务。

自然语言调度

与传统 cron 表达式不同,Hermes 允许您用日常语言描述任务计划,无需记忆复杂的 cron 语法:

每天早上 9 点检查我的邮件并总结重要内容
每周一发送本周工作计划到 Telegram
每隔 30 分钟检查一次服务器状态,如果有异常则发送告警

Hermes 会自动将这些描述转换为内部调度格式并持久化保存。


hermes cron 子命令

list — 列出所有定时任务

bash
hermes cron list

输出示例:

ID    NAME                  SCHEDULE          STATUS    LAST RUN              NEXT RUN
---   -------------------   ---------------   -------   -------------------   -------------------
1     daily-email-summary   0 9 * * *         active    2025-04-07 09:00:05   2025-04-08 09:00:00
2     weekly-report         0 9 * * 1         active    2025-04-07 09:00:12   2025-04-14 09:00:00
3     server-monitor        */30 * * * *      paused    2025-04-07 08:30:00   —
4     db-backup             0 2 * * *         active    2025-04-07 02:00:03   2025-04-08 02:00:00

create — 创建定时任务

bash
# 使用自然语言
hermes cron create "每天凌晨 2 点备份数据库"

# 使用 cron 表达式
hermes cron create --schedule "0 2 * * *" --name "db-backup" "执行数据库备份并上传到 S3"

# 指定执行配置
hermes cron create \
  --schedule "0 9 * * 1-5" \
  --name "daily-standup" \
  --profile work \
  "总结昨天的 git commits 并生成今日工作计划"

edit — 编辑任务

bash
# 修改任务描述或调度时间
hermes cron edit 1

# 直接更新调度时间
hermes cron edit 1 --schedule "0 10 * * *"

pause — 暂停任务

bash
# 按 ID 暂停
hermes cron pause 3

# 按名称暂停
hermes cron pause server-monitor

暂停后的任务不会自动执行,但保留配置,可随时恢复。

resume — 恢复任务

bash
hermes cron resume 3
hermes cron resume server-monitor

run — 立即执行

不等待下次调度时间,立即触发一次任务执行:

bash
hermes cron run 1
hermes cron run daily-email-summary

适合测试任务配置是否正确。

remove — 删除任务

bash
hermes cron remove 3
hermes cron remove server-monitor

# 删除所有已暂停的任务
hermes cron remove --paused

status — 查看任务状态

bash
hermes cron status 1

输出:

Task: daily-email-summary (ID: 1)
Schedule: 0 9 * * * (每天 09:00)
Status: active
Created: 2025-04-01 10:23:45
Last Run: 2025-04-07 09:00:05 (success, 23s)
Next Run: 2025-04-08 09:00:00
Run Count: 7
Success Rate: 100%

tick — 手动触发调度检查

bash
# 强制检查所有任务是否需要执行(调试用)
hermes cron tick

调度示例

日常自动化

bash
# 每天早上汇总昨日新闻
hermes cron create "每天早上 7:30 搜索科技新闻并发送摘要到 Telegram"

# 工作日下班前提醒
hermes cron create --schedule "0 18 * * 1-5" "提醒我整理今天的工作笔记"

# 每月第一天生成月度报告
hermes cron create --schedule "0 9 1 * *" "生成上月工作统计报告"

系统监控

bash
# 每 5 分钟检查服务健康
hermes cron create --schedule "*/5 * * * *" \
  --name "health-check" \
  "检查 API 服务是否正常响应,异常时发送告警"

# 每天检查磁盘空间
hermes cron create --schedule "0 8 * * *" \
  "检查服务器磁盘使用率,超过 80% 时发送告警"

数据处理

bash
# 每小时同步数据
hermes cron create --schedule "0 * * * *" \
  --name "data-sync" \
  "从上游 API 拉取最新数据并更新本地数据库"

# 每天凌晨清理临时文件
hermes cron create --schedule "0 3 * * *" \
  "清理 /tmp 目录下超过 24 小时的文件"

内容创作

bash
# 每周生成周报
hermes cron create --schedule "0 17 * * 5" \
  --name "weekly-report" \
  "汇总本周工作成果,生成 Markdown 格式周报并保存到 ~/reports/"

# 每天为社交媒体准备内容
hermes cron create "每天上午 10 点根据最新科技新闻生成 3 条推文草稿"

任务执行环境

会话隔离

每个定时任务在独立会话中执行,拥有:

  • 独立的对话历史
  • 继承创建时的配置(toolsets、profile 等)
  • 独立的任务 ID

工具集配置

定时任务使用创建时所在会话的工具集,也可以显式指定:

bash
hermes cron create \
  --toolsets "web,terminal,file" \
  --schedule "0 6 * * *" \
  "下载昨日股票数据并生成分析报告"

结果通知

任务完成后,结果可以通过配置的渠道发送:

yaml
# ~/.hermes/config.yaml
cron:
  notification:
    on_success: false    # 成功时不通知(减少噪音)
    on_failure: true     # 失败时发送告警
    channel: telegram    # 通知渠道

cron 表达式参考

虽然推荐使用自然语言,但也支持标准 cron 表达式:

分  时  日  月  周
*   *   *   *   *

常用示例:
0 9 * * *       # 每天 09:00
*/30 * * * *    # 每 30 分钟
0 9 * * 1-5     # 工作日 09:00
0 0 1 * *       # 每月 1 日 00:00
0 2 * * 0       # 每周日 02:00

持久化存储

定时任务配置持久化存储在 ~/.hermes/state.db 中,重启后自动恢复。

bash
# 导出所有定时任务配置
hermes cron list --export > my-crons.json

# 从备份恢复
hermes cron import my-crons.json

基于 MIT 许可发布 | 由 Nous Research 开发