Files
my-project/config/openclaw/scripts/config-backup-monitor.sh
T

99 lines
2.6 KiB
Bash
Executable File

#!/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