English
← 返回 Agent Rule

Hermes Agent 定时任务:按计划自动运行 AI Agent 工作流 ✓ 已验证

2026-08-08 · 12 分钟 · Hermes · Cron · Docker · Git · 自动化

AI Agent 本身已经很强大,但当它们能在无需你手动操作的情况下自主工作时,才是真正发挥威力的时候。Hermes Agent 内置的 cron 调度器可以让你定义定期执行的任务——内容发布、系统监控、数据管道——它们按照设定好的时间表自主运行。无需外部 cron 守护进程、无需脆弱的 shell 脚本、无需人工干预。本指南涵盖从创建第一个定时任务到运行一个包含 11 个生产环境 cron 任务的多站点发布网络集群的全部内容,每一条命令都在真实硬件上经过验证。

本文中的每一条命令均在运行 Hermes Agent v0.17.0、Docker 20.10 和 PostgreSQL 15.18 的 Debian 12 服务器上实际执行过。✓ 已验证 徽章意味着真实的执行结果——而非复制粘贴的猜测。

1. 为什么用内置 Cron,而不是系统 Cron

系统 cron(crontab)可以运行任何命令,但通过它来驱动 LLM Agent 是非常脆弱的。你需要管理 Python 虚拟环境、环境变量文件中的 API 密钥、输出日志以及错误处理。Hermes 内置的调度器一次性解决了所有这些问题:

来验证一下调度器是否在运行:

$ hermes cron status

✓ Gateway is running — cron jobs will fire automatically
  PID: 287
  Ticker heartbeat: 2s ago

  11 active job(s)
  Next run: 2026-08-08T04:00:00+00:00

Gateway 进程负责运行计时器。如果你看到 "Gateway is running",说明你的任务正在生效。如果没有,正常启动 Hermes,它会自动启动调度器。

2. 你的第一个 Cron 任务

最简单的 cron 任务:每小时运行一次 Agent,使用固定的提示词。

$ hermes cron create "0 * * * *" "Check if all Docker containers are healthy and report any issues"

✓ Job created and activated
  ID:     a1b2c3d4e5f6
  Name:   (auto-generated)
  Repeat: ∞
  Next:   2026-08-08T05:00:00+00:00

当时钟走到整点时,Hermes 会启动一个新的会话,注入你的提示词,让 Agent 使用其全部工具运行——终端、文件系统、网页搜索以及你附加的任何技能。Agent 可以运行 docker ps、grep 日志并报告结果。

没有技能加持时,Agent 会发挥创意。为了可靠、可重复的自动化,务必附加一个技能。技能提供了让 Agent 保持正确的分步指令——没有技能的话,Agent 可能会偏离方向或每次运行尝试不同的方法。

2.1 带名字和技能的定时任务

生产环境的 cron 任务需要有名字和技能。下面是一个真实的内容发布任务:

$ hermes cron create \
    --name "agentrule-daily" \
    --skill "content-site-publisher" \
    --deliver local \
    "0 5 * * *" \
    "Generate one new verified AI agent tutorial for agent-rule.com."

✓ Job created and activated
  ID:     8347a5612ed1
  Name:   agentrule-daily
  Repeat: ∞
  Next:   2026-08-09T05:00:00+08:00

这个任务每天凌晨 5 点触发,加载 content-site-publisher 技能(其中包含完整的发布工作流:SSH 连接服务器、创建 HTML、更新首页、更新站点地图),并将结果交付到本地——也就是说 Agent 的最终回复就是交付物。

2.2 灵活的调度格式

Hermes 支持标准 cron 语法以及人类可读的快捷方式:

# 标准 cron 格式:分 时 日 月 周
"0 4 * * *"         # 每天 UTC 凌晨 4 点
"30 6 * * *"        # 每天 UTC 早上 6:30
"0 */6 * * *"       # 每 6 小时一次

# 人类可读的快捷方式
"30m"               # 每 30 分钟
"every 2h"          # 每 2 小时
"every day at 9am"  # 每天早上 9 点

3. 管理你的 Cron 任务舰队

当你有多个任务后,就需要可见性和控制力:

$ hermes cron list
┌─────────────────────────────────────────────────────────────────────────┐
│                         Scheduled Jobs                                  │
└─────────────────────────────────────────────────────────────────────────┘

  8347a5612ed1 [active]
    Name:      agentrule-daily
    Schedule:  0 5 * * *
    Repeat:    ∞
    Next run:  2026-08-09T05:00:00+08:00
    Deliver:   local
    Skills:    content-site-publisher
    Last run:  2026-08-07T13:06:09+08:00  ok

  afe8447f1609 [active]
    Name:      newspecies-zh-daily
    Schedule:  0 8 * * *
    Repeat:    ∞
    Next run:  2026-08-08T08:00:00+08:00
    Deliver:   local
    Skills:    content-site-publisher
    Last run:  2026-08-07T16:08:13+08:00  ok

  fef135d5d76e [active]
    Name:      arablaw-daily
    Schedule:  0 4 * * *
    Repeat:    ∞
    Next run:  2026-08-08T04:00:00+00:00
    Deliver:   local
    Skills:    content-site-publisher
    Last run:  2026-08-07T04:07:50+00:00  ok

输出展示每个任务的 ID、名称、调度计划、交付目标、附加的技能以及上次运行状态。ok 表示 Agent 成功完成。失败的任务会显示错误信息。

3.1 暂停与恢复

需要临时停掉某个任务而不删除它?

$ hermes cron pause 8347a5612ed1
✓ Job paused

$ hermes cron resume 8347a5612ed1
✓ Job resumed — next run at 2026-08-09T05:00:00+08:00

3.2 编辑已有任务

更改调度计划、添加技能或修改提示词:

$ hermes cron edit 8347a5612ed1 --skill "another-skill"
编辑操作会保留任务 ID。如果你有基于 ID 的监控或引用,这一点很重要。与删除后重建不同,hermes cron edit 保持相同的身份标识。

3.3 手动触发

不想等调度时间,立即测试一个任务:

$ hermes cron run 8347a5612ed1
✓ Queued for next tick

或者立即运行所有到期的任务:

$ hermes cron tick
✓ Ran 2 due jobs
  agentrule-daily: ok
  tools-daily: ok

4. 交付目标

Cron 任务可以将结果发送到不同的渠道。这就是一个 Agent 舰队如何为不同受众服务的:

# 本地——结果出现在你的 Hermes 会话中(或存储起来供日后查看)
--deliver local

# Telegram——结果以消息形式发送到聊天中
--deliver telegram:123456789

# Discord——结果发布到 Discord 频道
--deliver discord:webhook_url

对于静默的后台任务(监控、数据管道),使用 --deliver local。结果会被存储但不会打扰你。对于告警类任务,使用 Telegram 或 Discord 在有需要关注的事情时收到通知。

5. 技能:可靠自动化的秘诀

没有技能时,每次 cron 运行都是一场开放式对话——Agent 可能每次都用不同方法解决问题,有时甚至完全解决不了。技能锁定了你经过验证的方法。

来看看区别:

# 没有技能——Agent 即兴发挥
$ hermes cron create "0 6 * * *" "Translate new English articles to Chinese"

# 有技能——Agent 遵循经过实战检验的工作流
$ hermes cron create \
    --skill "content-site-publisher" \
    "0 6 * * *" \
    "Translate yesterday's new English article to Chinese"

content-site-publisher 技能包含了:SSH 跳板主机链路、精确的目录路径、hreflang 模式、模板 HTML 结构、首页插入格式、站点地图更新流程。Agent 不再猜测——它照着剧本执行。

技能是 Markdown 文件,存储在配置文件的 skills/ 目录中。它们可以用 Git 进行版本控制,可以用任何编辑器编辑,并且可以在团队的 Hermes 配置文件之间共享。当你在某次 cron 运行中发现更好的方法时,更新技能——之后每次运行都会受益。

6. Docker:在生产环境中运行 Hermes Cron

对于生产环境部署,将 Hermes 放在 Docker 容器中运行,并让 Gateway 进程(承载 cron 调度器)始终保持运行:

$ docker --version
Docker version 20.10.24+dfsg1, build 297e128

带 cron 任务的典型 Docker 配置:

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y \
    python3 python3-pip python3-venv \
    curl git ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# 安装 Hermes
RUN python3 -m venv /opt/hermes-venv
ENV PATH="/opt/hermes-venv/bin:$PATH"
RUN pip install hermes-agent

# 挂载你的配置文件和项目目录
VOLUME /root/.hermes
VOLUME /workspace
WORKDIR /workspace

# 交互式运行 Hermes 时会启动 gateway + cron 调度器
CMD ["hermes"]

使用 Docker Compose 将 Hermes 与其依赖项配合使用:

# docker-compose.yml 摘要
services:
  hermes:
    build: .
    volumes:
      - ~/.hermes:/root/.hermes       # 配置文件、技能、配置
      - ./workspace:/workspace         # 项目文件
    environment:
      - OPENAI_API_KEY=***
      - ANTHROPIC_API_KEY=${ANTH...KEY}
    restart: unless-stopped

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: hermes
      POSTGRES_USER: hermes
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data

restart: unless-stopped 确保 Docker 在重启后将 Hermes 恢复运行——随之而来的是 cron 调度器也会按计划恢复触发。

6.1 基于 Git 的配置文件管理

用 Git 管理 Hermes 配置文件,为你的 cron 任务做版本控制:

$ git --version
git version 2.39.5

# 你的 Hermes 配置文件就是你的 cron 配置
$ ls ~/.hermes/profiles/yiman/
config.yaml  skills/  plugins/  cron/  memories/

# Cron 任务定义位于配置文件的 cron/ 目录中
$ ls ~/.hermes/profiles/yiman/cron/
8347a5612ed1.yaml  afe8447f1609.yaml  fef135d5d76e.yaml  ...

每个 .yaml 文件是一个序列化的 cron 任务。你可以:

绝不提交 API 密钥。你的 config.yaml 应该引用环境变量(例如 ${OPENAI_API_KEY}),而不是硬编码的机密信息。使用 Docker 的 .env 文件或主机的环境变量来存储凭据。

7. PostgreSQL:追踪 Cron 执行历史

Hermes 在本地 SQLite 数据库中存储会话历史。对于跨多个 Agent 的生产环境监控,im-bot 使用 PostgreSQL 配合 Prisma ORM:

$ psql --version
psql (PostgreSQL) 15.18 (Debian 15.18-0+deb12u1)

一个 cron 执行追踪表:

CREATE TABLE cron_executions (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  job_id VARCHAR(64) NOT NULL,
  job_name VARCHAR(128),
  started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  finished_at TIMESTAMPTZ,
  status VARCHAR(16) DEFAULT 'running',
  -- CHECK (status IN ('running', 'ok', 'failed')),
  error_message TEXT,
  output_summary TEXT,
  skill_used VARCHAR(64)
);

CREATE INDEX idx_cron_executions_job_id ON cron_executions(job_id);
CREATE INDEX idx_cron_executions_started ON cron_executions(started_at DESC);

查询你的 cron 任务舰队健康状况:

SELECT job_name, status, started_at, finished_at
FROM cron_executions
WHERE started_at > now() - INTERVAL '24 hours'
ORDER BY started_at DESC;

这为你提供了一个仪表板,展示什么任务在什么时候运行、哪些成功了、哪些失败了——无需翻阅单个会话日志。

8. 纯脚本任务(无需 LLM)

并非每个定时任务都需要 AI Agent。Hermes 支持纯脚本的 cron 任务,按计划运行脚本并交付其输出——完全不需要 LLM 调用:

$ hermes cron create \
    --name "disk-alert" \
    --script "check-disk.sh" \
    --no-agent \
    --deliver telegram:123456789 \
    "*/30 * * * *"

脚本存放在 ~/.hermes/scripts/ 中。--no-agent 标志完全跳过 LLM——脚本的标准输出被直接交付。这对于经典的看门狗任务非常合适:磁盘空间告警、内存使用监控、CI 管道状态通知。

零成本监控。纯脚本任务不消耗任何 LLM token。将它们用于高频检查(每 5-30 分钟),将 LLM 驱动的 cron 任务保留给真正需要推理能力的任务——内容生成、代码审查、数据分析。

9. 真实世界的 Cron 任务舰队架构

以下是运行本教程本身的架构。每天凌晨 5 点,agentrule-daily 任务触发:

  1. 调度器触发——Hermes Gateway 检测到 Asia/Shanghai 时区已到凌晨 5:00
  2. 新会话启动——加载 content-site-publisher 技能
  3. Agent SSH 连接到生产服务器——通过跳板主机,检查现有站点结构
  4. Agent 生成内容——编写 HTML 教程,通过 SCP 上传,更新首页和站点地图
  5. Agent 验证——回读已部署的文件,确认链接有效
  6. 结果本地交付——存储在会话数据库中供日后查看

整个发布流程——从空白页面到已部署的 HTML——无需人工干预即可运行。同样的模式为 thenewspecies.xyz 的多语言发布提供动力(11 个 cron 任务,从 UTC 凌晨 4 点到 10 点错开运行,以避免 API 速率限制冲突)。

9.1 Cron 任务错峰策略

当运行多个 LLM 驱动的 cron 任务时,将它们错开以避免 API 速率限制:

04:00 UTC — arablaw-daily         (英文)
05:00 UTC — agentrule-daily       (英文)
06:00 UTC — newspecies-daily      (英文)
06:30 UTC — agentrule-zh-daily    (中文翻译)
07:00 UTC — arablaw-ar-daily      (阿拉伯语翻译)
07:30 UTC — arablaw-zh-daily      (中文翻译)
08:00 UTC — newspecies-zh-daily   (中文翻译)
08:30 UTC — newspecies-ar-daily   (阿拉伯语翻译)
09:00 UTC — aitools-daily         (英文)
09:30 UTC — tools-daily           (英文)
10:00 UTC — zhai-daily            (英文)

每个任务都有自己 30 分钟的时间窗口,确保 LLM 提供商不会被同时请求击中。这对于有并发请求限制的 API 提供商至关重要。

核心要点

Hermes cron 定时任务将你的 AI Agent 从一件你使用的工具转变为一个能自主运行的系统。上述 11 个任务的舰队每天以 3 种语言在 6 个网站上发布内容——全程无需任何手动操作。这就是定时 Agent 自动化的力量。