Hermes Agent的SQLite状态数据库需通过Shell+Cron、Git检查点或systemd timer三种方式实现自动化备份:一、Shell脚本配合Cron每日定时拷贝;二、Git检查点模式提交版本化快照;三、systemd timer提供健壮守护式备份。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您正在使用Hermes Agent并依赖其SQLite状态数据库(~/.hermes/state.db)维持会话连续性与工具调用历史,但尚未建立可靠的备份机制,则可能面临因文件损坏、误覆盖或磁盘故障导致的上下文丢失风险。以下是针对该数据库实现SQL备份自动化的多种可行路径:
一、基于Shell脚本与Cron的定时本地备份
该方法通过操作系统级调度任务,在固定时间点对state.db执行带时间戳的原子拷贝,不依赖外部服务,轻量可控,适用于所有Linux/macOS部署环境。
1、创建备份脚本文件:执行mkdir -p ~/.hermes/scripts && touch ~/.hermes/scripts/backup_state.sh。
2、向脚本写入备份逻辑:使用echo '#!/bin/bash\ncp ~/.hermes/state.db ~/.hermes/backups/state.db.$(date +\%Y\%m\%d_\%H\%M\%S)' > ~/.hermes/scripts/backup_state.sh。
3、赋予执行权限:运行chmod +x ~/.hermes/scripts/backup_state.sh。
4、配置每日凌晨2点自动执行:执行(crontab -l 2>/dev/null; echo "0 2 * * * ~/.hermes/scripts/backup_state.sh") | crontab -。
5、手动创建备份目录:运行mkdir -p ~/.hermes/backups确保目标路径存在。
二、利用Git检查点模式实现版本化快照
当Hermes Agent运行于已初始化Git仓库的项目中时,启用Git检查点可将每次关键状态变更提交为独立提交,并归类至专用分支,天然具备时间线追溯、差异比对与单提交回滚能力。
1、确认Git仓库就绪:在项目根目录执行git rev-parse --is-inside-work-tree,返回true即有效。
2、启用检查点功能:设置环境变量export HERMES_CHECKPOINT_MODE=git,并确保该变量在Agent启动环境中生效。
3、验证检查点分支生成:运行git branch --format="%(refname:short)" | grep "hermes/checkpoints/",应可见类似hermes/checkpoints/session_xyz789的分支。
4、强制触发一次检查点:向Agent发送指令如“保存当前会话状态”,观察Git日志是否新增提交。
5、备份整个Git仓库:定期执行git clone --mirror <current_repo_path> /backup/hermes-repo-mirror.git</current_repo_path>,保留全部分支与提交历史。
三、集成systemd timer实现更健壮的守护式备份
相比Cron,systemd timer支持失败重试、资源限制、依赖服务声明及日志审计,适合生产环境长期运行,尤其适配systemd管理的Hermes Agent服务实例。
1、创建timer单元文件:执行sudo tee /etc/systemd/system/hermes-state-backup.timer,内容为:
[Unit]
Description=Daily backup of Hermes state.db
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target。
2、创建对应service单元:执行sudo tee /etc/systemd/system/hermes-state-backup.service,内容为:
[Unit]
Description=Backup Hermes SQLite state database
After=hermes-agent.service
[Service]
Type=oneshot
ExecStart=/usr/bin/cp /home/$USER/.hermes/state.db /home/$USER/.hermes/backups/state.db.$$(date +\%Y\%m\%d_\%H\%M\%S)
User=$USER
Group=$USER
Environment=PATH=/usr/local/bin:/usr/bin:/bin。
3、重载systemd配置:运行sudo systemctl daemon-reload。
4、启用并启动timer:执行sudo systemctl enable hermes-state-backup.timer && sudo systemctl start hermes-state-backup.timer。
5、验证timer状态:运行systemctl list-timers | grep hermes,确认下次触发时间与状态为“active”。











