From 68f00e3873f3fc5aa4f4feb76909247b241c1934 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Thu, 12 Feb 2026 10:11:14 -0600 Subject: [PATCH] log output --- backup_mail.sh | 55 ++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/backup_mail.sh b/backup_mail.sh index ab96a55..781cf85 100755 --- a/backup_mail.sh +++ b/backup_mail.sh @@ -3,15 +3,18 @@ # ============================================================================== # 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" +# ============================================================================== +# HILFSFUNKTION: LOGGING (Bildschirm + Datei) +# ============================================================================== +log() { + # Schreibt Zeitstempel + Text auf stdout (Bildschirm) UND in das Logfile + echo "$(date '+%Y-%m-%d %H:%M:%S') | $1" | tee -a "$LOGFILE" +} + # ============================================================================== # PARAMETER & VALIDIERUNG # ============================================================================== @@ -22,48 +25,47 @@ 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" + echo "Beispiel: sudo $0 buddelectric.net buddelectric 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" + log "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) +# LOCKING # ============================================================================== -LOCKFILE="/var/run/rclone_mail_${DOMAIN}.lock" +LOCKFILE_PATH="/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 +if [ -e ${LOCKFILE_PATH} ] && kill -0 `cat ${LOCKFILE_PATH}` 2>/dev/null; then + log "ABBRUCH: Backup für $DOMAIN läuft bereits." exit 1 fi -trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT -echo $$ > ${LOCKFILE} +trap "rm -f ${LOCKFILE_PATH}; exit" INT TERM EXIT +echo $$ > ${LOCKFILE_PATH} # ============================================================================== # 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 +log "----------------------------------------------------------------" +log "START Backup" +log "Domain: $DOMAIN" +log "Quelle: $SOURCE_PATH" +log "Ziel: $REMOTE_NAME:$BUCKET_NAME" -# Rclone Befehl +# Rclone ausführen +# --progress zeigt den Balken im Terminal (landet nicht im Logfile, das ist gut so) +# --log-file schreibt technische Details NUR ins Logfile (nicht auf den Schirm, um ihn nicht zu fluten) /usr/bin/rclone sync "$SOURCE_PATH" "$REMOTE_NAME:$BUCKET_NAME" \ --config "$RCLONE_CONFIG" \ --exclude "**/tmp/**" \ @@ -75,15 +77,16 @@ echo "Ziel: $REMOTE_NAME:$BUCKET_NAME" >> $LOGFILE --fast-list \ --min-age 15m \ --log-file $LOGFILE \ - --log-level INFO + --log-level INFO \ + --progress EXIT_CODE=$? if [ $EXIT_CODE -eq 0 ]; then - echo "STATUS: $DOMAIN erfolgreich gesichert am $(date)" >> $LOGFILE + log "STATUS: ERFOLG - $DOMAIN erfolgreich gesichert." else - echo "STATUS: FEHLER bei $DOMAIN (Code $EXIT_CODE) am $(date)" >> $LOGFILE + log "STATUS: FEHLER - Exit Code $EXIT_CODE. Details siehe $LOGFILE" fi -echo "----------------------------------------------------------------" >> $LOGFILE +log "----------------------------------------------------------------" exit $EXIT_CODE \ No newline at end of file