68 lines
1.7 KiB
Bash
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
|