From e0555181a113f2b0e840db1d63a1ebf8af0b5e1b Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Thu, 12 Feb 2026 10:03:32 -0600 Subject: [PATCH] backup mails --- backup_mail.sh | 56 ++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/backup_mail.sh b/backup_mail.sh index 12521f9..ab96a55 100755 --- a/backup_mail.sh +++ b/backup_mail.sh @@ -1,51 +1,56 @@ #!/bin/bash # ============================================================================== -# KONFIGURATION (Dinge, die sich selten ändern) +# 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" -# Pfad zu den lokalen Mail-Daten (Source) -# Wenn du NUR buddelectric.net sichern willst, häng das hier an. -# Wenn du ALLE Domains sichern willst, lass es auf .../mail-data -SOURCE_PATH="/home/aknuth/git/email-amazon/DMS/docker-data/dms/mail-data/buddelectric.net" - # Log Datei LOGFILE="/var/log/mail_backup.log" -# Lockfile (Verhindert doppeltes Ausführen) -LOCKFILE="/var/run/rclone_mail.lock" - # ============================================================================== -# PARAMETER CHECK +# PARAMETER & VALIDIERUNG # ============================================================================== -REMOTE_NAME=$1 -BUCKET_NAME=$2 +DOMAIN=$1 +REMOTE_NAME=$2 +BUCKET_NAME=$3 -if [[ -z "$REMOTE_NAME" || -z "$BUCKET_NAME" ]]; then +if [[ -z "$DOMAIN" || -z "$REMOTE_NAME" || -z "$BUCKET_NAME" ]]; then echo "FEHLER: Fehlende Parameter." - echo "Benutzung: sudo $0 " - echo "Beispiel: sudo $0 buddelectric buddelectric-mails" + echo "Benutzung: sudo $0 " + echo "Beispiel: sudo $0 buddelectric.net idrive buddelectric-mails" exit 1 fi -# ============================================================================== -# SICHERHEITS-CHECKS -# ============================================================================== -# Prüfen ob wir root sind (nötig für Zugriff auf Docker Files) +# 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 "Dieses Skript muss als root ausgeführt werden (sudo)." + echo "FEHLER: Dieses Skript muss als root ausgeführt werden (sudo)." exit 1 fi -# Prüfen ob Backup schon läuft +# ============================================================================== +# 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 läuft bereits. Breche ab." + echo "Backup für $DOMAIN läuft bereits. Breche ab." >> $LOGFILE exit 1 fi -# Trap: Lockfile löschen bei Abbruch oder Ende trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT echo $$ > ${LOCKFILE} @@ -54,6 +59,7 @@ echo $$ > ${LOCKFILE} # ============================================================================== echo "----------------------------------------------------------------" >> $LOGFILE echo "START Backup: $(date)" >> $LOGFILE +echo "Domain: $DOMAIN" >> $LOGFILE echo "Quelle: $SOURCE_PATH" >> $LOGFILE echo "Ziel: $REMOTE_NAME:$BUCKET_NAME" >> $LOGFILE @@ -74,9 +80,9 @@ echo "Ziel: $REMOTE_NAME:$BUCKET_NAME" >> $LOGFILE EXIT_CODE=$? if [ $EXIT_CODE -eq 0 ]; then - echo "STATUS: Erfolgreich abgeschlossen am $(date)" >> $LOGFILE + echo "STATUS: $DOMAIN erfolgreich gesichert am $(date)" >> $LOGFILE else - echo "STATUS: FEHLER (Exit Code $EXIT_CODE) am $(date)" >> $LOGFILE + echo "STATUS: FEHLER bei $DOMAIN (Code $EXIT_CODE) am $(date)" >> $LOGFILE fi echo "----------------------------------------------------------------" >> $LOGFILE