AI Agent 本身已经很强大,但当它们能在无需你手动操作的情况下自主工作时,才是真正发挥威力的时候。Hermes Agent 内置的 cron 调度器可以让你定义定期执行的任务——内容发布、系统监控、数据管道——它们按照设定好的时间表自主运行。无需外部 cron 守护进程、无需脆弱的 shell 脚本、无需人工干预。本指南涵盖从创建第一个定时任务到运行一个包含 11 个生产环境 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,它会自动启动调度器。
最简单的 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 日志并报告结果。
生产环境的 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 的最终回复就是交付物。
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 点
当你有多个任务后,就需要可见性和控制力:
$ 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 成功完成。失败的任务会显示错误信息。
需要临时停掉某个任务而不删除它?
$ hermes cron pause 8347a5612ed1
✓ Job paused
$ hermes cron resume 8347a5612ed1
✓ Job resumed — next run at 2026-08-09T05:00:00+08:00
更改调度计划、添加技能或修改提示词:
$ hermes cron edit 8347a5612ed1 --skill "another-skill"
hermes cron edit 保持相同的身份标识。不想等调度时间,立即测试一个任务:
$ hermes cron run 8347a5612ed1
✓ Queued for next tick
或者立即运行所有到期的任务:
$ hermes cron tick
✓ Ran 2 due jobs
agentrule-daily: ok
tools-daily: ok
Cron 任务可以将结果发送到不同的渠道。这就是一个 Agent 舰队如何为不同受众服务的:
# 本地——结果出现在你的 Hermes 会话中(或存储起来供日后查看)
--deliver local
# Telegram——结果以消息形式发送到聊天中
--deliver telegram:123456789
# Discord——结果发布到 Discord 频道
--deliver discord:webhook_url
对于静默的后台任务(监控、数据管道),使用 --deliver local。结果会被存储但不会打扰你。对于告警类任务,使用 Telegram 或 Discord 在有需要关注的事情时收到通知。
没有技能时,每次 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 不再猜测——它照着剧本执行。
skills/ 目录中。它们可以用 Git 进行版本控制,可以用任何编辑器编辑,并且可以在团队的 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 调度器也会按计划恢复触发。
用 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 任务。你可以:
config.yaml 应该引用环境变量(例如 ${OPENAI_API_KEY}),而不是硬编码的机密信息。使用 Docker 的 .env 文件或主机的环境变量来存储凭据。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;
这为你提供了一个仪表板,展示什么任务在什么时候运行、哪些成功了、哪些失败了——无需翻阅单个会话日志。
并非每个定时任务都需要 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 管道状态通知。
以下是运行本教程本身的架构。每天凌晨 5 点,agentrule-daily 任务触发:
content-site-publisher 技能整个发布流程——从空白页面到已部署的 HTML——无需人工干预即可运行。同样的模式为 thenewspecies.xyz 的多语言发布提供动力(11 个 cron 任务,从 UTC 凌晨 4 点到 10 点错开运行,以避免 API 速率限制冲突)。
当运行多个 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 提供商至关重要。
restart: unless-stopped——Gateway 进程(及其 cron 调度器)在重启后仍能存活cron_executions 表就能为你的任务舰队健康提供仪表板--no-agentHermes cron 定时任务将你的 AI Agent 从一件你使用的工具转变为一个能自主运行的系统。上述 11 个任务的舰队每天以 3 种语言在 6 个网站上发布内容——全程无需任何手动操作。这就是定时 Agent 自动化的力量。