#!/bin/bash # ============================================================================== # KONFIGURATION # ============================================================================== # Basis-Pfad zu den Mail-Daten (ohne Domain!) BASE_MAIL_PATH="/home/aknuth/git/email-amazon/DMS/docker-data/dms/mail-data" # Pfad zu deiner Rclone Config RCLONE_CONFIG="/home/aknuth/.config/rclone/rclone.conf" # Log Datei LOGFILE="/var/log/mail_backup.log" # ============================================================================== # PARAMETER & VALIDIERUNG # ============================================================================== DOMAIN=$1 REMOTE_NAME=$2 BUCKET_NAME=$3 if [[ -z "$DOMAIN" || -z "$REMOTE_NAME" || -z "$BUCKET_NAME" ]]; then echo "FEHLER: Fehlende Parameter." echo "Benutzung: sudo $0 " echo "Beispiel: sudo $0 buddelectric.net idrive buddelectric-mails" exit 1 fi # Vollständiger Quell-Pfad SOURCE_PATH="${BASE_MAIL_PATH}/${DOMAIN}" # Prüfen, ob Quell-Ordner existiert if [ ! -d "$SOURCE_PATH" ]; then echo "FEHLER: Quell-Ordner existiert nicht: $SOURCE_PATH" exit 1 fi # Prüfen ob wir root sind if [[ $EUID -ne 0 ]]; then echo "FEHLER: Dieses Skript muss als root ausgeführt werden (sudo)." exit 1 fi # ============================================================================== # LOCKING (Pro Domain ein eigenes Lockfile) # ============================================================================== LOCKFILE="/var/run/rclone_mail_${DOMAIN}.lock" if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}` 2>/dev/null; then echo "Backup für $DOMAIN läuft bereits. Breche ab." >> $LOGFILE exit 1 fi trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT echo $$ > ${LOCKFILE} # ============================================================================== # BACKUP START # ============================================================================== echo "----------------------------------------------------------------" >> $LOGFILE echo "START Backup: $(date)" >> $LOGFILE echo "Domain: $DOMAIN" >> $LOGFILE echo "Quelle: $SOURCE_PATH" >> $LOGFILE echo "Ziel: $REMOTE_NAME:$BUCKET_NAME" >> $LOGFILE # Rclone Befehl /usr/bin/rclone sync "$SOURCE_PATH" "$REMOTE_NAME:$BUCKET_NAME" \ --config "$RCLONE_CONFIG" \ --exclude "**/tmp/**" \ --exclude "*.lock" \ --exclude "dovecot-uidlist.lock" \ --exclude ".dovecot.lda-dupes" \ --transfers 32 \ --checkers 32 \ --fast-list \ --min-age 15m \ --log-file $LOGFILE \ --log-level INFO EXIT_CODE=$? if [ $EXIT_CODE -eq 0 ]; then echo "STATUS: $DOMAIN erfolgreich gesichert am $(date)" >> $LOGFILE else echo "STATUS: FEHLER bei $DOMAIN (Code $EXIT_CODE) am $(date)" >> $LOGFILE fi echo "----------------------------------------------------------------" >> $LOGFILE exit $EXIT_CODE