diff --git a/vps-snapshot.sh b/vps-snapshot.sh index 2853487..6050623 100755 --- a/vps-snapshot.sh +++ b/vps-snapshot.sh @@ -1,7 +1,7 @@ #!/bin/bash #=============================================================================== -# VPS 快照备份脚本 v3.15 +# VPS 快照备份脚本 v3.16 # 支持: Ubuntu, Debian, CentOS, Alpine # 功能: 智能识别应用 + Docker迁移 + 数据备份 + Telegram通知 #=============================================================================== @@ -19,7 +19,7 @@ LOG_FILE="/var/log/vps-snapshot.log" print_banner() { echo -e "${BLUE}" echo "╔═══════════════════════════════════════════════════════════╗" - echo "║ VPS 快照备份脚本 v3.15 ║" + echo "║ VPS 快照备份脚本 v3.16 ║" echo "║ 智能识别 + Docker迁移 + 数据备份 ║" echo "╚═══════════════════════════════════════════════════════════╝" echo -e "${NC}" @@ -388,12 +388,21 @@ backup_app_data() { local snap_dir="${LOCAL_DIR:-/var/snapshots}" if [ -n "$backup_paths" ]; then log "📦 打包数据目录..." + local exclude_args="" + if [ -n "$EXCLUDE_PATHS" ]; then + IFS=':' read -ra _ep <<< "$EXCLUDE_PATHS" + for _p in "${_ep[@]}"; do + [ -n "$_p" ] && exclude_args+=" --exclude=$_p" + done + log "排除路径: $EXCLUDE_PATHS" + fi tar --exclude='*.sock' --exclude='*.pid' --exclude='node_modules' \ --exclude='.npm' --exclude='.cache' --exclude='__pycache__' \ --exclude='*.log' --exclude='/var/log/*' \ --exclude='/var/cache/*' --exclude='/tmp/*' \ --exclude="$snap_dir" --exclude='/var/snapshots' \ --exclude='/root/.cache' --exclude='/root/.local/share/Trash' \ + $exclude_args \ -czf "$output_dir/app-data.tar.gz" $backup_paths 2>/dev/null || true local data_size=$(du -h "$output_dir/app-data.tar.gz" 2>/dev/null | cut -f1) info "数据已保存: $output_dir/app-data.tar.gz ($data_size)" @@ -1164,6 +1173,7 @@ REMOTE_DIR="$REMOTE_DIR" REMOTE_KEEP_DAYS="$REMOTE_KEEP_DAYS" TG_BOT_TOKEN="$TG_BOT_TOKEN" TG_CHAT_ID="$TG_CHAT_ID" +EXCLUDE_PATHS="$EXCLUDE_PATHS" EOF chmod 600 "$CONFIG_FILE" } @@ -1204,6 +1214,10 @@ do_setup() { read -p "Bot Token: " TG_BOT_TOKEN [ -n "$TG_BOT_TOKEN" ] && read -p "Chat ID: " TG_CHAT_ID + echo "" + info "排除路径 (可选,多个用冒号分隔,如 /data/downloads:/data/media)" + read -p "排除路径 [无]: " EXCLUDE_PATHS + save_config log "配置已保存到 $CONFIG_FILE" }