Files

68 lines
1.7 KiB
Bash

#!/usr/bin/env bash
# Config Rollback Script - 이전 설정으로 복구
# Usage: config-rollback.sh [backup-file]
# config-rollback.sh (interactive mode - 최근 5개 선택)
set -euo pipefail
CONFIG_FILE="$HOME/.openclaw/openclaw.json"
BACKUP_DIR="$HOME/openclaw/config-history"
# Interactive mode
if [ $# -eq 0 ]; then
echo "📋 Recent config backups:"
echo ""
# 최근 10개 백업 목록
mapfile -t BACKUPS < <(ls -t "$BACKUP_DIR"/*.json 2>/dev/null | head -10)
if [ ${#BACKUPS[@]} -eq 0 ]; then
echo "❌ No backup files found in $BACKUP_DIR"
exit 1
fi
# 번호 매겨서 출력
for i in "${!BACKUPS[@]}"; do
FILENAME=$(basename "${BACKUPS[$i]}")
SIZE=$(du -h "${BACKUPS[$i]}" | cut -f1)
MTIME=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "${BACKUPS[$i]}")
echo " $((i+1)). $FILENAME ($SIZE, $MTIME)"
done
echo ""
read -p "Select backup number (1-${#BACKUPS[@]}), or 0 to cancel: " CHOICE
if [ "$CHOICE" -eq 0 ] 2>/dev/null; then
echo "Cancelled."
exit 0
fi
if [ "$CHOICE" -lt 1 ] || [ "$CHOICE" -gt ${#BACKUPS[@]} ] 2>/dev/null; then
echo "❌ Invalid choice"
exit 1
fi
BACKUP_FILE="${BACKUPS[$((CHOICE-1))]}"
else
BACKUP_FILE="$1"
fi
# Backup 파일 존재 확인
if [ ! -f "$BACKUP_FILE" ]; then
echo "❌ Backup file not found: $BACKUP_FILE"
exit 1
fi
# 현재 config를 emergency 백업
EMERGENCY_BACKUP="$BACKUP_DIR/emergency-$(date +%Y%m%d-%H%M%S).json"
cp "$CONFIG_FILE" "$EMERGENCY_BACKUP"
echo "🔒 Emergency backup created: $EMERGENCY_BACKUP"
# Rollback 실행
cp "$BACKUP_FILE" "$CONFIG_FILE"
echo "✅ Config restored from: $(basename "$BACKUP_FILE")"
echo ""
echo "⚠️ Gateway restart required: openclaw gateway restart"
exit 0