Hermes Agent 版本更新操作指南:从备份到回滚的完整流程
Hermes Agent 的迭代速度很快——v0.11.0 一个版本就合并了 761 个 PR、1556 次提交。版本更新是日常操作,但如果流程不规范,轻则消息丢几条,重则配置全丢、服务起不来。
这篇文章把我在实际更新过程中总结的流程整理出来,适用于当前 v0.11.0(v2026.4.23)及后续版本,重点是怎么更新不出事,出了事怎么恢复。
为什么要专门写一篇更新指南?
很多人觉得 hermes update 一条命令的事,有什么好写的。
但实际跑起来你会发现几个问题:
- 更新的时候网关还在跑,飞书/微信那边发来的消息直接丢了,因为更新过程中代码文件在变,模块加载可能出错
- 更新完版本号变了,但旧配置格式和新版本不兼容,网关起不来
- 想回退,发现没备份,只能从零开始配
所以核心思路就一句话:先停服务、再备份、再更新、最后验证。顺序不能乱。
第一步:停掉网关服务
这是最容易被忽略的一步,也是最重要的一步。
Hermes Agent 的网关(gateway)负责接收飞书、微信、Telegram 等平台的消息。更新过程中如果网关还在运行,可能出现:
- 消息接收了但处理到一半,代码文件被覆盖,直接报错
- 依赖库版本变了,正在运行的进程还在用旧版本,行为不可预期
- 数据库 schema 变了,旧进程写入的数据格式不对
操作方法:
如果网关在前台运行(终端里能看到日志滚动),直接 Ctrl+C 终止。
如果网关在后台运行(比如用 nohup 或 systemd 拉起来的),需要手动找进程杀掉:
# 找到 hermes 相关进程
ps aux | grep hermes
# 终止进程(把 PID 换成实际的进程号)
kill -9 <PID>
验证服务已停:
# 方法一:再跑一次 gateway,看是不是提示没有正在运行的实例
hermes gateway
# 方法二:直接看进程列表
ps aux | grep hermes
# 没有输出就说明停干净了
💡 小提示:如果你的 Hermes 是通过 systemd 管理的,用
systemctl stop hermes-gateway更规范。
第二步:备份数据
这步的目的很简单:万一更新搞砸了,能恢复到更新前的状态。
方案一:手动备份(推荐,最稳)
直接复制整个配置目录:
cp -r ~/.hermes ~/.hermes_bak_$(date +%Y%m%d)
这一条命令会把所有核心数据都备份下来,包括:
| 文件/目录 | 作用 |
|---|---|
config.yaml | 核心运行配置(模型、API Key、网关设置等) |
state.db | 会话历史和记忆数据库 |
cron/ | 定时任务配置 |
skills/ | 自定义技能 |
memory/ | 持久化记忆 |
.env | 环境变量(API Key 等敏感信息) |
SOUL.md | 人格设定文件(如果有的话) |
方案二:官方备份命令
Hermes 提供了内置的备份命令:
# 基础备份,自动生成压缩包
hermes backup
# 指定输出路径
hermes backup -o /opt/backup/hermes_pre_update.zip
# 快速备份(只备份核心配置,跳过大体积的会话数据)
hermes backup --quick --label pre_update_$(date +%Y%m%d)
⚠️ 注意:如果你的 Hermes 版本较旧,
hermes backup命令可能还不存在。这种情况下直接用方案一的cp -r就行,效果是一样的。
第三步:执行更新
备份做完了,现在可以放心更新。
hermes update
这条命令会自动完成:
- 拉取最新代码
- 更新 Python 依赖
- 执行必要的数据迁移
- 输出新版本号
执行过程中注意几点:
- 保持网络稳定——更新需要从 GitHub/PyPI 拉取代码和依赖,网络中断会导致更新不完整
- 不要中断终端——更新到一半强行关掉终端,可能导致依赖装了一半、代码拉了一半,状态不一致
- 如果提示依赖问题——执行
hermes doctor自动诊断修复
# 更新完如果有异常,先跑一次诊断
hermes doctor
第四步:验证更新结果
更新命令跑完不代表就成功了,需要做两个验证。
1. 检查版本号
hermes --version
确认输出的版本号是你期望的目标版本。比如当前最新是 v0.11.0 (v2026.4.23)。
2. 环境健康检查
hermes doctor
这个命令会检查:
- Python 版本是否兼容
- 必要依赖是否安装完整
- 配置文件格式是否正确
- API Key 是否有效
- 各个工具链是否可用
所有检查项都是 ✅ 就说明更新成功。
3. 网关验证(可选但建议)
重新启动网关,然后从飞书/微信发一条测试消息,看能不能正常收到和回复:
hermes gateway
消息收发正常 → 更新完成,收工。
出问题了?回滚恢复
如果更新后出现服务起不来、功能异常、配置丢失等情况,不要慌,用备份恢复。
从手动备份恢复
# 1. 先停掉可能还在跑的异常进程
ps aux | grep hermes | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null
# 2. 删除有问题的当前目录
rm -rf ~/.hermes
# 3. 还原备份
cp -r ~/.hermes_bak_20260426 ~/.hermes
# 4. 重启网关验证
hermes gateway
从官方备份恢复
hermes import ~/hermes-backup-20260426.zip
恢复后还是有问题?
几个排查方向:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
hermes 命令找不到 | 虚拟环境没激活 | cd ~/hermes-agent && source venv/bin/activate |
| 启动报依赖错误 | pip 包版本不对 | pip install -r requirements.txt |
| 配置文件解析失败 | 新版本 config 格式变了 | 用备份的 config.yaml 替换,或执行 hermes setup 重新配置 |
| 网关连不上平台 | Token/Webhook 过期 | 重新配置对应平台的认证信息 |
完整操作流程速查
怕记不住的话,照着这个 checklist 走就行:
□ 1. 停网关 → Ctrl+C 或 kill 进程
□ 2. 备份数据 → cp -r ~/.hermes ~/.hermes_bak_$(date +%Y%m%d)
□ 3. 执行更新 → hermes update
□ 4. 检查版本 → hermes --version
□ 5. 环境诊断 → hermes doctor
□ 6. 启动网关 → hermes gateway
□ 7. 发测试消息 → 飞书/微信发一条消息确认收发正常
整个流程顺利的话,5 分钟以内搞定。
一些经验之谈
-
养成更新前备份的习惯。哪怕只是
cp -r一下,花不了 10 秒钟,但出问题的时候能救命。 -
不要在业务高峰期更新。如果你的 Hermes 连着飞书在跑业务流程,找一个消息少的时间段(比如午休或下班后)再更新。
-
更新频率不用太高。不是每次有新 commit 都需要更新。关注 Release 页面,有正式版本发布了再更新,比跟着 main 分支跑稳定得多。
-
如果你改过源码。直接
hermes update可能会冲突。建议先git stash保存本地修改,更新完再git stash pop恢复。有冲突的话手动解决。 -
多机部署的情况。如果你在多台机器上跑 Hermes,不要同时更新,先更新一台验证没问题了再更新其他的。
写这篇的初衷就是把更新这件"小事"的每一步都说清楚。很多运维事故不是技术难度高,而是流程不规范、少做了一步。希望对同样在用 Hermes Agent 的朋友有帮助。
