#!/bin/bash
# ==============================================
# 📤 推送备份到 Windows 共享（凌晨5点）
# 从 Nginx 目录推送一个压缩包 → Windows 共享
# 慢就慢，慢慢传
# ==============================================

SMB_SERVER="//100.70.76.54"
SMB_SHARE="0000sharebak"
SMB_USER="share"
SMB_PASS="share123"
SMB_BASE="openclaw"
NGINX_DIR="/home/www/html/backup"
DATE_TAG=$(date +%Y-%m-%d)
ARCHIVE="$NGINX_DIR/$DATE_TAG/backup-$DATE_TAG.tar.gz"
LOG_FILE="/var/log/push-backup.log"
LOCK_FILE="/tmp/push-backup.lock"

exec 200>"$LOCK_FILE"
flock -n 200 || { echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ 推送脚本已在运行，跳过" | tee -a "$LOG_FILE"; exit 0; }

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"; }

log "========================"
log "推送开始 ($DATE_TAG)"

# 检查备份文件是否就绪
if [ ! -f "$ARCHIVE" ]; then
    log "⚠️ 备份文件 $ARCHIVE 不存在，明天再试"
    exit 1
fi
ARCHIVE_SIZE=$(du -h "$ARCHIVE" | cut -f1)
log "备份文件: $ARCHIVE ($ARCHIVE_SIZE)"

# 推送到 Windows 共享
SMB_PATH="$SMB_BASE/$DATE_TAG"
log "推送至 $SMB_SERVER/$SMB_SHARE/$SMB_PATH/ ..."

RETRY=0
MAX_RETRY=5
PUSH_OK=0

while [ $RETRY -lt $MAX_RETRY ]; do
    RETRY=$((RETRY + 1))
    log "第 $RETRY 次推送..."
    
    smbclient $SMB_SERVER/$SMB_SHARE -U $SMB_USER%$SMB_PASS -m SMB3 -t 600 <<SMBCMDS 2>> "$LOG_FILE" | tee -a "$LOG_FILE" | tail -3
mkdir $SMB_BASE
cd $SMB_BASE
mkdir $DATE_TAG
cd $DATE_TAG
lcd $NGINX_DIR/$DATE_TAG
put backup-$DATE_TAG.tar.gz
ls
SMBCMDS
    
    SMB_EXIT=${PIPESTATUS[0]}
    if [ $SMB_EXIT -eq 0 ]; then
        log "✅ 推送成功"
        PUSH_OK=1
        break
    else
        log "⚠️ 推送失败 (exit=$SMB_EXIT)，60秒后重试..."
        sleep 60
    fi
done

if [ $PUSH_OK -eq 0 ]; then
    log "⚠️ $MAX_RETRY 次推送均失败，明天再试"
fi

log ""
log "========================"
log "✅ 推送结束"
log "========================"

flock -u 200
