OpenClaw 备份系统 v2:定时轮转与一键恢复
最近重构了 OpenClaw 的备份体系,从原来的文件监听自动备份改为定时轮转架构,实现更可靠的备份策略和更完整的恢复体验。
设计思路
旧方案的问题是:
- 文件监听触发频繁,容易产生过多历史版本
- 恢复时不会自动重建定时任务
- 配置分散在多个仓库
新方案的核心是 定时备份 + 单仓标签轮转 + 配置自包含:
- 一个仓库:
openclaw-backup.git - 三个标签:
current → backup-1 → backup-2 - 定时触发:每晚 23:00 自动备份
- 配置导出:自动保存定时任务到
.cron-jobs.json
架构特点
1. 极简命令
backup now # 立即备份
backup list # 查看历史版本
backup restore # 交互式恢复
2. 定时轮转
每晚 23:00 自动执行备份,保留最近 3 个历史版本:
新备份前: current backup-1 backup-2
↓ ↓ ↓
新备份后: 新内容 原current 原backup-1
(原backup-2 被删除)
Git 标签是轻量级的,只是指针移动,不会复制文件内容。
3. 配置自包含
备份时自动导出定时任务配置:
{
"jobs": [
{ "name": "系统心跳", "schedule": "0 8 * * *", ... },
{ "name": "Git 备份", "schedule": "0 23 * * *", ... }
]
}
恢复时自动读取 .cron-jobs.json 重建所有定时任务。
4. 零依赖恢复
重装系统后只需一行命令:
curl http://10.10.10.230:8080/restore.sh | bash
全程自动完成:
- 安装 Homebrew/Git/Node
- 恢复 SSH 密钥
- 克隆 workspace(含技能+记忆+脚本)
- 安装 OpenClaw
- 重建所有定时任务
无需预装任何依赖,甚至不需要手动配置。
技术实现
Git 服务器架构
10.10.10.230
├── /srv/git/openclaw-backup.git # 裸仓库
├── git daemon (9418端口) # 匿名克隆
└── busybox httpd (8080端口) # 提供 restore.sh
恢复流程
# 1. 下载恢复脚本
curl -o /tmp/restore.sh http://10.10.10.230:8080/restore.sh
2. 交互式选择版本
bash /tmp/restore.sh
[0] current - 2026-02-17 (最新)
[1] backup-1 - 2026-02-16
[2] backup-2 - 2026-02-15
3. 确认重建定时任务
发现 .cron-jobs.json,是否重建定时任务? [Y/n]
版本轮转逻辑
# 推送新备份
git push origin main --force
标签轮转
git tag -d backup-2 2>/dev/null
git tag backup-2 backup-1
git tag backup-1 current
git tag -f current main
推送标签
git push origin –tags –force
部署流程
首次部署(Git 服务器)
# 1. 创建裸仓库
ssh root@10.10.10.230
mkdir -p /srv/git/openclaw-backup.git
cd /srv/git/openclaw-backup.git
git init --bare
2. 启动 Git Daemon
git daemon –reuseaddr –base-path=/srv/git/ /srv/git/
3. 启动 HTTP 服务(提供 restore.sh)
busybox httpd -p 8080 -h /srv/www
客户端配置
# 1. 配置 Git 远程
git remote add backup git@10.10.10.230:/srv/git/openclaw-backup.git
2. 首次备份
backup now
3. 定时任务已自动创建(每晚 23:00)
恢复实战
场景:Mac 重装后恢复
# 1. 执行恢复脚本
curl http://10.10.10.230:8080/restore.sh | bash
2. 选择版本(示例选 current)
> 0
3. 重建定时任务
> Y
4. 完成
恢复完成!请重新加载 shell 配置:
source ~/.zshrc
约 10-15 分钟完成全部恢复。
对比旧方案
| 特性 | 旧方案 | 新方案 |
|---|---|---|
| 触发方式 | 文件监听 | 定时任务 |
| 版本数量 | 4 个 | 3 个 |
| 定时任务恢复 | 不支持 | ✅ 自动重建 |
| 配置管理 | 分散 | ✅ 自包含 |
| 恢复命令 | 多行 | ✅ 1 行 |
| 预装依赖 | Git/SSH | ✅ 无 |
适用场景
这套系统适合:
- 个人工作站备份
- 开发环境同步
- 配置即代码(Dotfiles)
- 需要快速重装恢复的场景
不适合:
- 大型项目代码管理(用 Git 原生工作流)
- 需要审计日志的企业环境
- 多人协作频繁的场景
后续优化
- 支持备份到云端(S3/阿里云OSS)
- Web 界面查看历史版本
- 增量备份(目前是全量)
- 备份加密
- 备份失败告警
备份这件事,越简单越容易坚持。新系统运行两周,确实比原来省心多了。
快速参考:
backup now # 立即备份
backup list # 查看版本
backup restore # 交互式恢复