diff --git a/Mount/HiDrive.sh b/Mount/HiDrive.sh index 750002b..0be7216 100755 --- a/Mount/HiDrive.sh +++ b/Mount/HiDrive.sh @@ -7,6 +7,16 @@ source "$SCRIPT_DIR/../Utility/WakeOnLan.sh" source "$SCRIPT_DIR/../Utility/IsMounted.sh" source "$SCRIPT_DIR/../Utility/Log.sh" +# === KONSTANTEN === +MAX_RESTARTS=2 # Maximale Anzahl an Neustarts +RESTART_COUNT_FILE="/tmp/hidrive_restart_count" # Datei zur Speicherung des Neustart-Zählers + +# === Neustart-Zähler initialisieren === +if [[ ! -f "$RESTART_COUNT_FILE" ]]; then + echo 0 >"$RESTART_COUNT_FILE" +fi +RESTART_COUNT=$(<"$RESTART_COUNT_FILE") + # === Hilfe-Seite === if [[ "$*" == *"-h"* ]]; then echo "Benutzung: $0 " @@ -62,39 +72,16 @@ check_webdav_installed() { return 0 } -check_webdav_credentials() { - if [[ ! -f "$WEBDAV_CREDENTIALS" ]]; then - log "Fehler: WebDAV-Passwortdatei nicht gefunden unter $WEBDAV_CREDENTIALS!" - return 1 - fi - if ! grep -q "$MOUNT_POINT" "$WEBDAV_CREDENTIALS"; then - log "Fehler: Keine Zugangsdaten für den Mountpoint $MOUNT_POINT in $WEBDAV_CREDENTIALS gefunden!" - return 1 - fi - return 0 -} - -mount_nfs() { - log "Versuche, NFS-Dateisystem von $NFS_SERVER einzubinden..." - mkdir -p "$MOUNT_POINT" - if mount -t nfs "$NFS_SERVER" "$MOUNT_POINT"; then - log "NFS erfolgreich unter $MOUNT_POINT eingebunden!" - return 0 +restart_script() { + if [[ $RESTART_COUNT -lt $MAX_RESTARTS ]]; then + RESTART_COUNT=$((RESTART_COUNT + 1)) + echo "$RESTART_COUNT" >"$RESTART_COUNT_FILE" + log "Neustart des Skripts (Versuch $RESTART_COUNT von $MAX_RESTARTS)..." + exec "$0" "$@" else - log "Fehler beim Einbinden von NFS!" - return 1 - fi -} - -mount_webdav() { - log "Versuche, WebDAV-Dateisystem von $WEBDAV_URL einzubinden..." - mkdir -p "$MOUNT_POINT" - if mount -t davfs "$WEBDAV_URL" "$MOUNT_POINT"; then - log "WebDAV erfolgreich unter $MOUNT_POINT eingebunden!" - return 0 - else - log "Fehler beim Einbinden von WebDAV!" - return 1 + log "Maximale Anzahl an Neustarts erreicht ($MAX_RESTARTS). Skript wird beendet." + rm -f "$RESTART_COUNT_FILE" # Neustart-Zähler zurücksetzen + exit 1 fi } @@ -103,9 +90,16 @@ mount_webdav() { # Prüfen, ob das Dateisystem bereits gemountet ist if is_mounted "$MOUNT_POINT"; then log "Das Dateisystem ist bereits gemountet unter $MOUNT_POINT." + rm -f "$RESTART_COUNT_FILE" # Neustart-Zähler zurücksetzen exit 0 # Skript beenden, da kein weiteres Mounten erforderlich ist fi +# Prüfen, ob NFS oder WebDAV installiert ist +if ! check_nfs_installed && ! check_webdav_installed; then + log "Weder NFS noch WebDAV sind installiert. Neustart erforderlich." + restart_script "$@" +fi + # Wenn nicht gemountet, mit der Hauptlogik fortfahren log "Starte Wake-on-LAN-Prozess..." DEVICE_IP=$(wake_device "$DEVICE_MAC") @@ -122,3 +116,6 @@ else mount_webdav fi fi + +# Neustart-Zähler zurücksetzen, wenn erfolgreich +rm -f "$RESTART_COUNT_FILE"