backup mails

This commit is contained in:
Andreas Knuth 2026-02-12 10:03:32 -06:00
parent b3fd560ee1
commit e0555181a1
1 changed files with 31 additions and 25 deletions

View File

@ -1,51 +1,56 @@
#!/bin/bash #!/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 # Pfad zu deiner Rclone Config
RCLONE_CONFIG="/home/aknuth/.config/rclone/rclone.conf" 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 # Log Datei
LOGFILE="/var/log/mail_backup.log" LOGFILE="/var/log/mail_backup.log"
# Lockfile (Verhindert doppeltes Ausführen)
LOCKFILE="/var/run/rclone_mail.lock"
# ============================================================================== # ==============================================================================
# PARAMETER CHECK # PARAMETER & VALIDIERUNG
# ============================================================================== # ==============================================================================
REMOTE_NAME=$1 DOMAIN=$1
BUCKET_NAME=$2 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 "FEHLER: Fehlende Parameter."
echo "Benutzung: sudo $0 <RCLONE_REMOTE_NAME> <BUCKET_NAME>" echo "Benutzung: sudo $0 <DOMAIN> <RCLONE_REMOTE> <BUCKET>"
echo "Beispiel: sudo $0 buddelectric buddelectric-mails" echo "Beispiel: sudo $0 buddelectric.net idrive buddelectric-mails"
exit 1 exit 1
fi fi
# ============================================================================== # Vollständiger Quell-Pfad
# SICHERHEITS-CHECKS SOURCE_PATH="${BASE_MAIL_PATH}/${DOMAIN}"
# ==============================================================================
# Prüfen ob wir root sind (nötig für Zugriff auf Docker Files) # 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 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 exit 1
fi 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 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 exit 1
fi fi
# Trap: Lockfile löschen bei Abbruch oder Ende
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
echo $$ > ${LOCKFILE} echo $$ > ${LOCKFILE}
@ -54,6 +59,7 @@ echo $$ > ${LOCKFILE}
# ============================================================================== # ==============================================================================
echo "----------------------------------------------------------------" >> $LOGFILE echo "----------------------------------------------------------------" >> $LOGFILE
echo "START Backup: $(date)" >> $LOGFILE echo "START Backup: $(date)" >> $LOGFILE
echo "Domain: $DOMAIN" >> $LOGFILE
echo "Quelle: $SOURCE_PATH" >> $LOGFILE echo "Quelle: $SOURCE_PATH" >> $LOGFILE
echo "Ziel: $REMOTE_NAME:$BUCKET_NAME" >> $LOGFILE echo "Ziel: $REMOTE_NAME:$BUCKET_NAME" >> $LOGFILE
@ -74,9 +80,9 @@ echo "Ziel: $REMOTE_NAME:$BUCKET_NAME" >> $LOGFILE
EXIT_CODE=$? EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then if [ $EXIT_CODE -eq 0 ]; then
echo "STATUS: Erfolgreich abgeschlossen am $(date)" >> $LOGFILE echo "STATUS: $DOMAIN erfolgreich gesichert am $(date)" >> $LOGFILE
else else
echo "STATUS: FEHLER (Exit Code $EXIT_CODE) am $(date)" >> $LOGFILE echo "STATUS: FEHLER bei $DOMAIN (Code $EXIT_CODE) am $(date)" >> $LOGFILE
fi fi
echo "----------------------------------------------------------------" >> $LOGFILE echo "----------------------------------------------------------------" >> $LOGFILE