99 lines
2.6 KiB
Bash
Executable File
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
|