#!/bin/bash # # OpenClaw 配置备份监控脚本 # 功能:监控 openclaw.json 变化,自动备份,最多保留10个版本 # OPENCLAW_CONFIG="/root/.openclaw/openclaw.json" BACKUP_DIR="/root/.openclaw/backups" MAX_BACKUPS=10 CHECK_INTERVAL=60 # 每60秒检查一次 # 确保备份目录存在 mkdir -p "$BACKUP_DIR" # 获取当前文件的md5 get_md5() { md5sum "$OPENCLAW_CONFIG" 2>/dev/null | cut -d' ' -f1 } # 记录日志 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" } # 备份函数 backup_config() { local current_md5=$(get_md5) local timestamp=$(date '+%Y-%m-%d_%H-%M-%S') local backup_file="$BACKUP_DIR/openclaw.json.$timestamp.bak" # 复制配置文件 cp "$OPENCLAW_CONFIG" "$backup_file" log "已备份: $backup_file (md5: $current_md5)" # 清理旧备份,保留最多10个 backup_count=$(ls -1 "$BACKUP_DIR"/openclaw.json.*.bak 2>/dev/null | wc -l) if [ "$backup_count" -gt "$MAX_BACKUPS" ]; then # 按修改时间删除最旧的备份 old_backups=$(ls -1t "$BACKUP_DIR"/openclaw.json.*.bak | tail -n +$((MAX_BACKUPS + 1))) for old_backup in $old_backups; do rm -f "$old_backup" log "已删除旧备份: $old_backup" done fi # 保存当前md5供下次对比 echo "$current_md5" > "$BACKUP_DIR/.last_md5" } # 主循环 main() { log "配置备份监控启动..." # 首次运行:备份当前配置 if [ -f "$OPENCLAW_CONFIG" ]; then # 检查是否有上次记录的md5 if [ -f "$BACKUP_DIR/.last_md5" ]; then last_md5=$(cat "$BACKUP_DIR/.last_md5") current_md5=$(get_md5) if [ "$last_md5" != "$current_md5" ]; then log "检测到配置变化,首次备份..." backup_config else log "配置无变化,跳过备份" # 更新md5记录(确保文件存在) get_md5 > "$BACKUP_DIR/.last_md5" fi else log "首次运行,备份当前配置..." backup_config fi else log "错误: 配置文件不存在: $OPENCLAW_CONFIG" exit 1 fi # 持续监控循环 while true; do sleep "$CHECK_INTERVAL" if [ ! -f "$OPENCLAW_CONFIG" ]; then log "错误: 配置文件丢失: $OPENCLAW_CONFIG" sleep 60 continue fi current_md5=$(get_md5) last_md5=$(cat "$BACKUP_DIR/.last_md5" 2>/dev/null) if [ "$last_md5" != "$current_md5" ]; then log "检测到配置变化,开始备份..." backup_config fi done } main