HEX
Server: LiteSpeed
System: Linux s3604.bom1.stableserver.net 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
User: dmstechonline (1480)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: //proc/3233645/root/opt/sp_scripts/post_transfer_cleanup.sh
#!/bin/bash
#
# Post-Transfer Cleanup Script for cPanel Live Migration
# Clears mail contents and document root files while preserving account structure
#
# Usage: ./post_transfer_cleanup.sh <username> [--dry-run]
# Nikolay Ilchev 09/01/2026
CPUSER="${1:-}"
DRY_RUN=0
[[ "${2:-}" == "--dry-run" ]] && DRY_RUN=1
if [[ -z "$CPUSER" ]]; then
    echo "Usage: $0 <username> [--dry-run]"
    exit 1
fi
if [[ ! -f "/var/cpanel/users/$CPUSER" ]]; then
    echo "Error: $CPUSER is not a valid cPanel account"
    exit 1
fi
BACKUP_FOUND=0
if [[ -d "/var/backuply" ]]; then
    BACKUPLY=$(find /var/backuply/backups/$CPUSER -name "*_backup_*_[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]_*.json" -mtime -7 -type f 2>/dev/null | head -1)
    if [[ -n "$BACKUPLY" ]]; then
        BACKUP_FOUND=1
        echo "Backuply: $(basename "$BACKUPLY")"
    else
        echo "Backuply: No backup found, checking JetBackup..."
    fi
else
    echo "Backuply: Not installed, checking JetBackup..."
fi
if [[ $BACKUP_FOUND -eq 0 ]] && command -v jetbackup5api &>/dev/null; then
    JB_DATA=$(jetbackup5api -F listAccounts -D "limit=1000" -O json 2>/dev/null | jq -r ".data.accounts[] | select(.username==\"$CPUSER\")")
    if [[ -n "$JB_DATA" ]]; then
        JB_ID=$(echo "$JB_DATA" | jq -r '._id')
        JB_FULL=$(echo "$JB_DATA" | jq -r '.backup_stats["511"]')
        if [[ -n "$JB_FULL" && "$JB_FULL" -gt 0 ]]; then
            BACKUP_FOUND=1
            JB_LATEST=$(jetbackup5api -F listBackups -D "account_id=$JB_ID&type=1&contains=511&limit=200" -O json 2>/dev/null | jq -r '.data.backups | last | .created')
            echo "JetBackup: $JB_FULL full backups, latest: $JB_LATEST"
        fi
    fi
fi
if [[ $BACKUP_FOUND -eq 0 ]]; then
    echo "Error: No backup found for $CPUSER"
    exit 1
fi
if [[ ! -f "/var/cpanel/suspended/$CPUSER" ]]; then
    echo "Error: Account $CPUSER is not suspended"
    exit 1
fi
SUSPEND_REASON=$(cat "/var/cpanel/suspended/$CPUSER" 2>/dev/null)
if [[ "$SUSPEND_REASON" != "User transferred to another server" ]]; then
    echo "Error: Wrong suspension reason: $SUSPEND_REASON"
    exit 1
fi
HOMEDIR=$(grep "^$CPUSER:" /etc/passwd | cut -d: -f6)
if [[ -z "$HOMEDIR" || ! -d "$HOMEDIR" ]]; then
    echo "Error: Cannot find home directory"
    exit 1
fi
du -sh "$HOMEDIR" 2>/dev/null | awk '{print "Current usage: "$1}'
DOCROOTS=$(grep DocumentRoot /etc/apache2/conf/httpd.conf | grep "/home/$CPUSER" | awk '{print $2}' | tr -d '"' | sort -u)
echo "Cleaning document roots..."
for docroot in $DOCROOTS; do
    [[ -d "$docroot" ]] && echo "  $docroot"
done
echo "Cleaning mail directory..."
[[ -d "$HOMEDIR/mail" ]] && echo "  $HOMEDIR/mail"

if [[ $DRY_RUN -eq 1 ]]; then
    echo "[DRY RUN] No changes made"
    exit 0
fi

read -p "Proceed with deletion? (y/n): " CONFIRM
if [[ "$CONFIRM" != "y" ]]; then
    echo "Aborted."
    exit 1
fi

echo "Deleting..."
for docroot in $DOCROOTS; do
    if [[ -d "$docroot" ]]; then
        su - "$CPUSER" -s /bin/bash -c "find '$docroot' -type f ! -name '.htaccess' -delete 2>/dev/null"
        su - "$CPUSER" -s /bin/bash -c "find '$docroot' -mindepth 1 -type d -empty -delete 2>/dev/null"
    fi
done
if [[ -d "$HOMEDIR/mail" ]]; then
    su - "$CPUSER" -s /bin/bash -c "find '$HOMEDIR/mail' -type f -delete 2>/dev/null"
fi
du -sh "$HOMEDIR" 2>/dev/null | awk '{print "New usage: "$1}'
echo "Done."