From b3fd560ee1c2dedb51dbd006d31476ebdd343dfb Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Thu, 12 Feb 2026 10:00:36 -0600 Subject: [PATCH] backup emails --- backup_mail.sh | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100755 backup_mail.sh diff --git a/backup_mail.sh b/backup_mail.sh new file mode 100755 index 0000000..12521f9 --- /dev/null +++ b/backup_mail.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# ============================================================================== +# KONFIGURATION (Dinge, die sich selten ändern) +# ============================================================================== +# 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 +# ============================================================================== +REMOTE_NAME=$1 +BUCKET_NAME=$2 + +if [[ -z "$REMOTE_NAME" || -z "$BUCKET_NAME" ]]; then + echo "FEHLER: Fehlende Parameter." + echo "Benutzung: sudo $0 " + echo "Beispiel: sudo $0 buddelectric buddelectric-mails" + exit 1 +fi + +# ============================================================================== +# SICHERHEITS-CHECKS +# ============================================================================== +# Prüfen ob wir root sind (nötig für Zugriff auf Docker Files) +if [[ $EUID -ne 0 ]]; then + echo "Dieses Skript muss als root ausgeführt werden (sudo)." + exit 1 +fi + +# Prüfen ob Backup schon läuft +if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}` 2>/dev/null; then + echo "Backup läuft bereits. Breche ab." + exit 1 +fi + +# Trap: Lockfile löschen bei Abbruch oder Ende +trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT +echo $$ > ${LOCKFILE} + +# ============================================================================== +# BACKUP START +# ============================================================================== +echo "----------------------------------------------------------------" >> $LOGFILE +echo "START Backup: $(date)" >> $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: Erfolgreich abgeschlossen am $(date)" >> $LOGFILE +else + echo "STATUS: FEHLER (Exit Code $EXIT_CODE) am $(date)" >> $LOGFILE +fi +echo "----------------------------------------------------------------" >> $LOGFILE + +exit $EXIT_CODE \ No newline at end of file