From b3dedd446ff0c63a8a59bf274e18296c47d9a203 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Sat, 8 Mar 2025 11:33:02 +0100 Subject: [PATCH] =?UTF-8?q?Feat:=20F=C3=BCgt=20Lock-File=20funktionalit?= =?UTF-8?q?=C3=A4t=20hinzu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mount/HiDrive.sh | 15 +++++++++++++++ Utility/Lock.sh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 Utility/Lock.sh diff --git a/Mount/HiDrive.sh b/Mount/HiDrive.sh index 5afaad6..060739b 100755 --- a/Mount/HiDrive.sh +++ b/Mount/HiDrive.sh @@ -4,8 +4,15 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Utility/WakeOnLan.sh" source "$SCRIPT_DIR/../Utility/IsMounted.sh" +source "$SCRIPT_DIR/../Utility/Lock.sh" source "$SCRIPT_DIR/../Utility/Log.sh" +# === TRAP EINRICHTEN === +trap trap_remove_lock SIGINT SIGTERM + +# === LOCK-FILE ERSTELLEN === +create_lock + # === KONSTANTEN === MAX_RESTARTS=2 # Maximale Anzahl an Neustarts RESTART_COUNT_FILE="/tmp/hidrive_restart_count" # Datei zur Speicherung des Neustart-Zählers @@ -31,18 +38,21 @@ if [[ "$*" == *"-h"* ]]; then echo echo "Dieses Skript bindet HiDrive als Dateisystem ein bzw. ein lokales NAS, sollte dieses vorhanden sein." echo "WakeOnLan-Pakete werden zum Starten versendet." + remove_lock exit 0 fi # === ROOT-PRÜFUNG === if [[ $EUID -ne 0 ]]; then echo "Dieses Skript muss als root ausgeführt werden! Bitte starte es mit sudo." + remove_lock exit 1 fi # === PARAMETER-ÜBERPRÜFUNG === if [[ "$#" -ne 3 ]]; then echo "Benutzung: $0 " + remove_lock exit 1 fi @@ -76,10 +86,12 @@ restart_script() { RESTART_COUNT=$((RESTART_COUNT + 1)) echo "$RESTART_COUNT" >"$RESTART_COUNT_FILE" log "Neustart des Skripts (Versuch $RESTART_COUNT von $MAX_RESTARTS)..." + remove_lock exec "$0" "$@" else log "Maximale Anzahl an Neustarts erreicht ($MAX_RESTARTS). Skript wird beendet." rm -f "$RESTART_COUNT_FILE" # Neustart-Zähler zurücksetzen + remove_lock exit 1 fi } @@ -161,3 +173,6 @@ fi # Neustart-Zähler zurücksetzen, wenn erfolgreich rm -f "$RESTART_COUNT_FILE" + +# === LOCK-FILE ENTFERNEN === +remove_lock diff --git a/Utility/Lock.sh b/Utility/Lock.sh new file mode 100644 index 0000000..75834d1 --- /dev/null +++ b/Utility/Lock.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +LOCK_DIR="/run/lock" # Standard für systemweite Locks +if [[ ! -w "$LOCK_DIR" ]]; then + LOCK_DIR="/tmp" # Fallback für benutzerspezifische Locks +fi + +LOCK_FILE="$LOCK_DIR/$(basename "$0").lock" + +create_lock() { + if [[ -e "$LOCK_FILE" ]]; then + log "Ein anderer Prozess läuft bereits. Lock-File gefunden: $LOCK_FILE" + exit 1 + fi + touch "$LOCK_FILE" + log "Lock-File erstellt: $LOCK_FILE" +} + +remove_lock() { + if [[ -e "$LOCK_FILE" ]]; then + rm -f "$LOCK_FILE" + log "Lock-File entfernt: $LOCK_FILE" + fi +} + +trap_remove_lock() { + log "Signal empfangen. Lock-File wird entfernt." + remove_lock + exit 1 +}