OpenClaw 备份系统 v2:定时轮转与一键恢复

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    # 交互式恢复
Built with Hugo
Theme Stack designed by Jimmy