email-amazon/backup_mail.sh

92 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# ==============================================================================
# KONFIGURATION
# ==============================================================================
BASE_MAIL_PATH="/home/aknuth/git/email-amazon/DMS/docker-data/dms/mail-data"
RCLONE_CONFIG="/home/aknuth/.config/rclone/rclone.conf"
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
# ==============================================================================
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 <DOMAIN> <RCLONE_REMOTE> <BUCKET>"
echo "Beispiel: sudo $0 buddelectric.net buddelectric buddelectric-mails"
exit 1
fi
SOURCE_PATH="${BASE_MAIL_PATH}/${DOMAIN}"
if [ ! -d "$SOURCE_PATH" ]; then
log "FEHLER: Quell-Ordner existiert nicht: $SOURCE_PATH"
exit 1
fi
if [[ $EUID -ne 0 ]]; then
echo "FEHLER: Dieses Skript muss als root ausgeführt werden (sudo)."
exit 1
fi
# ==============================================================================
# LOCKING
# ==============================================================================
LOCKFILE_PATH="/var/run/rclone_mail_${DOMAIN}.lock"
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_PATH}; exit" INT TERM EXIT
echo $$ > ${LOCKFILE_PATH}
# ==============================================================================
# BACKUP START
# ==============================================================================
log "----------------------------------------------------------------"
log "START Backup"
log "Domain: $DOMAIN"
log "Quelle: $SOURCE_PATH"
log "Ziel: $REMOTE_NAME:$BUCKET_NAME"
# 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/**" \
--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 \
--progress
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
log "STATUS: ERFOLG - $DOMAIN erfolgreich gesichert."
else
log "STATUS: FEHLER - Exit Code $EXIT_CODE. Details siehe $LOGFILE"
fi
log "----------------------------------------------------------------"
exit $EXIT_CODE