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)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../Utility/WakeOnLan.sh" source "$SCRIPT_DIR/../Utility/WakeOnLan.sh"
source "$SCRIPT_DIR/../Utility/IsMounted.sh" source "$SCRIPT_DIR/../Utility/IsMounted.sh"
source "$SCRIPT_DIR/../Utility/Lock.sh"
source "$SCRIPT_DIR/../Utility/Log.sh" source "$SCRIPT_DIR/../Utility/Log.sh"
# === TRAP EINRICHTEN ===
trap trap_remove_lock SIGINT SIGTERM
# === LOCK-FILE ERSTELLEN ===
create_lock
# === KONSTANTEN === # === KONSTANTEN ===
MAX_RESTARTS=2 # Maximale Anzahl an Neustarts MAX_RESTARTS=2 # Maximale Anzahl an Neustarts
RESTART_COUNT_FILE="/tmp/hidrive_restart_count" # Datei zur Speicherung des Neustart-Zählers RESTART_COUNT_FILE="/tmp/hidrive_restart_count" # Datei zur Speicherung des Neustart-Zählers
@ -31,18 +38,21 @@ if [[ "$*" == *"-h"* ]]; then
echo echo
echo "Dieses Skript bindet HiDrive als Dateisystem ein bzw. ein lokales NAS, sollte dieses vorhanden sein." echo "Dieses Skript bindet HiDrive als Dateisystem ein bzw. ein lokales NAS, sollte dieses vorhanden sein."
echo "WakeOnLan-Pakete werden zum Starten versendet." echo "WakeOnLan-Pakete werden zum Starten versendet."
remove_lock
exit 0 exit 0
fi fi
# === ROOT-PRÜFUNG === # === ROOT-PRÜFUNG ===
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo "Dieses Skript muss als root ausgeführt werden! Bitte starte es mit sudo." echo "Dieses Skript muss als root ausgeführt werden! Bitte starte es mit sudo."
remove_lock
exit 1 exit 1
fi fi
# === PARAMETER-ÜBERPRÜFUNG === # === PARAMETER-ÜBERPRÜFUNG ===
if [[ "$#" -ne 3 ]]; then if [[ "$#" -ne 3 ]]; then
echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>" echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>"
remove_lock
exit 1 exit 1
fi fi
@ -76,10 +86,12 @@ restart_script() {
RESTART_COUNT=$((RESTART_COUNT + 1)) RESTART_COUNT=$((RESTART_COUNT + 1))
echo "$RESTART_COUNT" >"$RESTART_COUNT_FILE" echo "$RESTART_COUNT" >"$RESTART_COUNT_FILE"
log "Neustart des Skripts (Versuch $RESTART_COUNT von $MAX_RESTARTS)..." log "Neustart des Skripts (Versuch $RESTART_COUNT von $MAX_RESTARTS)..."
remove_lock
exec "$0" "$@" exec "$0" "$@"
else else
log "Maximale Anzahl an Neustarts erreicht ($MAX_RESTARTS). Skript wird beendet." log "Maximale Anzahl an Neustarts erreicht ($MAX_RESTARTS). Skript wird beendet."
rm -f "$RESTART_COUNT_FILE" # Neustart-Zähler zurücksetzen rm -f "$RESTART_COUNT_FILE" # Neustart-Zähler zurücksetzen
remove_lock
exit 1 exit 1
fi fi
} }
@ -161,3 +173,6 @@ fi
# Neustart-Zähler zurücksetzen, wenn erfolgreich # Neustart-Zähler zurücksetzen, wenn erfolgreich
rm -f "$RESTART_COUNT_FILE" 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
}