Feat: Fügt Lock-File funktionalität hinzu.

This commit is contained in:
DragonSlayer_14 2025-03-08 11:33:02 +01:00
parent 8cb964b666
commit b3dedd446f
2 changed files with 45 additions and 0 deletions

View File

@ -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 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>"
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

30
Utility/Lock.sh Normal file
View File

@ -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
}