#!/bin/bash # --------------------------------------------------------------------------------------------------------------------- # Festlegen von diversen Variablen # Konfigurationsvariablen MOUNT_POINT="./webdav/" #Ort wod die Webdav Freigabe eingehängt werden soll DOCKER_HOST="kitl-v-lx-dock.kitl.bayern" #IP oder Hostname wo der Docker Container Läuft SFTP_HOST1=$DOCKER_HOST #IP oder Hostname von dem Host von welchem die Datein geladen werden sollen, meist gleich zu Docker Host # Nutzerdaten DOCKER_USER="kitl" #Name des Nutzers für den Dockerhost SFTP_USER1=$DOCKER_USER #Name des Nutzers für den SFTPhost, meist gleich zu Docker # Farben für die Ausgabe GREEN="\033[0;32m" RED="\033[0;31m" NC="\033[0m" # Keine Farbe # ---------------------------------------------------------------------------------------------------------------------- # Festlegen von Funktionen # Funktion zur Ausgabe von log Meldungen function log() { echo -e "${GREEN}[INFO] $1${NC}" } # Funktion zur Ausgabe von error Meldungen function error() { echo -e "${RED}[ERROR] $1${NC}" } # Funktion für das Starten des Speziefischen Docker Containers function dockerremote(){ #Enrichten von Variablen für Funktion REMOTE_HOST=$1 REMOTE_USER=$2 CONTAINER_NAME=$3 # Prüfen, ob der Container läuft ssh "$REMOTE_USER@$REMOTE_HOST" "docker ps --filter name=$CONTAINER_NAME --filter status=running --quiet" > /dev/null 2>&1 if [ $? -ne 0 ]; then log "Der Container $CONTAINER_NAME ist nicht gestartet. Starte ihn jetzt..." ssh "$REMOTE_USER@$REMOTE_HOST" "docker start $CONTAINER_NAME" else log "Der Container $CONTAINER_NAME läuft bereits." fi # Warten, bis der Container gestoppt wird log "Warte, bis der Container $CONTAINER_NAME gestoppt ist..." ssh "$REMOTE_USER@$REMOTE_HOST" "while docker ps --filter name=$CONTAINER_NAME --filter status=running --quiet > /dev/null; do sleep 1; done" log "Der Container ist Gestoppt mache weiter" } # Funktion zum Herunterladen der Datein im angegebenen Verzeichniss function sftptransfer(){ #Einrichten der Variablen für Funktion REMOTE_USER=$1 REMOTE_HOST=$2 REMOTE_DIR=$3 LOCAL_DIR="./temp" # Prüfung das Localdir auch Existiert bevor log "Sicherstellen das $LOCAL_DIR existiert" mkdir -p "$LOCAL_DIR" # Anmelden über SFTP und Herunterladen der Datein log "Lade Datein von $REMOTE_DIR herunter" sftp "$REMOTE_USER"@"$REMOTE_HOST" << EOF cd $REMOTE_DIR lcd $LOCAL_DIR get -r * bye EOF log "Datein Heruntergeladen" } # --------------------------------------------------------------------------------------------- # Begin des Eigentlichen Scripts # Sicherstellen, dass das Skript als root ausgeführt wird if [[ $EUID -ne 0 ]]; then error "Dieses Skript muss als root ausgeführt werden!" exit 1 fi # Mount-Punkt erstellen log "Erstelle den Mount-Punkt $MOUNT_POINT..." mkdir -p "$MOUNT_POINT" chmod 755 "$MOUNT_POINT" # Starten von Docker Container dockerremote "$DOCKER_USER" "$DOCKER_HOST" "bw-export-iuk" # Holen der Datein welche durch Docker Container Erstellt wurden sftptransfer "$SFTP_USER1" "$SFTP_HOST1" "/sftpuser/export/data/" # WebDAV-Freigabe mounten log "Mounten der WebDAV-Freigabe nach $MOUNT_POINT..." rclone mount webdav: "$MOUNT_POINT" --daemon --allow-other --umask 002 || { error "Fehler beim Mounten der WebDAV-Freigabe!" exit 1 } log "WebDAV-Freigabe erfolgreich gemountet." # Leeren des Kommsafe Ordners von Alten Backups rm -rf $MOUNT_POINT # Übertragen der Aktuellen Backups nach Komsafe mv ./temp/* $MOUNT_POINT # Webdav Unmounten log "Unmounten der WebDAV-Freigabe..." if mountpoint -q "$MOUNT_POINT"; then fusermount -u "$MOUNT_POINT" && log "Unmount erfolgreich." || error "Fehler beim Unmounten!" else log "Der Mount-Punkt ist bereits unmountet." fi log "Backup der Datein erfolgreich ausgeführt"