V25.5.113.448 standalone

This commit is contained in:
ManfredAabye
2025-05-17 12:40:24 +02:00
committed by GitHub
parent 550536b383
commit ff819f1802
+156 -44
View File
@@ -5,50 +5,128 @@
#! ACHTUNG das loggen speichert alles auch vertrauliche Daten.
#?──────────────────────────────────────────────────────────────────────────────────────────
#* Debug-Log-System
#* ======================================================================
#* DEBUG-LOG-SYSTEM (Überarbeitete Version)
#*
#* Merkmale:
#* - Vollständig abwärtskompatibel zu bestehenden Aufrufen
#* - Thread-sicherer Zugriff auf Log-Datei (mit flock)
#* - Automatische Log-Rotation bei Größenüberschreitung
#* - Unterstützt farbige Konsolenausgabe und bereinigte Log-Dateien
#* - Robustere Fehlerbehandlung
#* ======================================================================
# 1. Logging ein/aus schalten
#LOG_ENABLED=false # Logging ist AUS
LOG_ENABLED=true # Logging ist AKTIV (Standard)
#* 1. LOGGING-KONFIGURATION
#* ----------------------------------------------------------------------
# 2. Alte Log-Datei löschen
OLD_LOG_DEL=true # Löscht alte Log-Datei vor Start (Standard)
# OLD_LOG_DEL=false # Behält alte Log-Datei und fügt neue Einträge an
# Logging global aktivieren/deaktivieren (true/false)
LOG_ENABLED=true # Default: true (Logging aktiv)
#LOG_ENABLED=false # Zum Deaktivieren
# 3. Log-Datei Name und Ort
DEBUG_LOG="osmtool_debug.log" # Speicherort der Log-Datei
# Soll die Log-Datei beim Start gelöscht werden?
OLD_LOG_DEL=true # Default: true (alte Logs löschen)
#OLD_LOG_DEL=false # Zum Deaktivieren
# Logdatei vorbereiten
if [[ "$LOG_ENABLED" == "true" ]]; then
# Log-Datei Name und Speicherort
DEBUG_LOG="osmtool_debug.log" # Default: im aktuellen Verzeichnis
# Maximale Log-Größe in MB bevor Rotation erfolgt (0 = deaktiviert)
MAX_LOG_SIZE_MB=10 # 10MB empfohlen
#* 2. LOG-SYSTEM INITIALISIERUNG
#* ----------------------------------------------------------------------
# Logdatei vorbereiten (wird nur aufgerufen wenn LOG_ENABLED=true)
function init_log_system() {
# Alte Log-Datei löschen falls gewünscht
if [[ "$OLD_LOG_DEL" == "true" ]]; then
rm "$DEBUG_LOG" 2>/dev/null
: > "$DEBUG_LOG" 2>/dev/null || {
echo "FEHLER: Kann Logdatei nicht zurücksetzen: $DEBUG_LOG" >&2
return 1
}
else
touch "$DEBUG_LOG" 2>/dev/null || {
echo "FEHLER: Kann Logdatei nicht erstellen: $DEBUG_LOG" >&2
return 1
}
fi
# Schreibrechte prüfen
if [ ! -w "$DEBUG_LOG" ]; then
echo "FEHLER: Keine Schreibrechte für Logdatei: $DEBUG_LOG" >&2
return 1
fi
return 0
}
# System bei Start initialisieren
if [[ "$LOG_ENABLED" == "true" ]]; then
if ! init_log_system; then
echo "WARNUNG: Logging wird deaktiviert (Initialisierung fehlgeschlagen)" >&2
LOG_ENABLED=false
fi
touch "$DEBUG_LOG" 2>/dev/null || echo "Kann Logdatei nicht erstellen" >&2
fi
# Verbesserte Funktion zum Entfernen von ANSI-Codes
#* 3. HILFSFUNKTIONEN
#* ----------------------------------------------------------------------
# Entfernt ANSI-Farbcodes aus Text (für Log-Datei)
function clean_ansi() {
echo -e "$1" | sed -E 's/\x1B\[([0-9]{1,3}(;[0-9]{1,3})*)?[mGK]//g'
}
# Log-Funktion
function log() {
local message="$1"
local level="${2:-INFO}"
local timestamp
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
# Führt Log-Rotation durch wenn MAX_LOG_SIZE_MB überschritten wird
function rotate_log_if_needed() {
[[ "$MAX_LOG_SIZE_MB" -eq 0 ]] && return # Rotation deaktiviert
# Zur Konsole (mit Farben)
echo -e "$message"
local log_size_mb
log_size_mb=$(du -m "$DEBUG_LOG" 2>/dev/null | cut -f1) || return
# Zur Logdatei (ohne Farbcodes)
if [[ "$LOG_ENABLED" == "true" ]]; then
local clean_message
clean_message=$(clean_ansi "$message")
echo "[${timestamp}] [${level}] ${clean_message}" >> "$DEBUG_LOG"
if [[ "$log_size_mb" -ge "$MAX_LOG_SIZE_MB" ]]; then
mv "$DEBUG_LOG" "${DEBUG_LOG}.old" 2>/dev/null
: > "$DEBUG_LOG" 2>/dev/null
fi
}
#* 4. HAUPT-LOG-FUNKTION (abwärtskompatibel!)
#* ----------------------------------------------------------------------
function log() {
local message="$1"
local level="${2:-INFO}" # Default-Level: INFO (abwärtskompatibel)
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
# 1. Immer zur Konsole ausgeben (mit Farben, genau wie bisher)
echo -e "$message"
# 2. Nur in Log-Datei schreiben wenn Logging aktiviert
if [[ "$LOG_ENABLED" == "true" ]]; then
# Log-Rotation prüfen
rotate_log_if_needed
# ANSI-Codes entfernen für Log-Datei
clean_message=$(clean_ansi "$message")
# Thread-sicheres Schreiben (falls flock verfügbar)
if command -v flock >/dev/null; then
(
flock -x 200
echo "[${timestamp}] [${level}] ${clean_message}" >> "$DEBUG_LOG"
) 200>>"$DEBUG_LOG"
else
echo "[${timestamp}] [${level}] ${clean_message}" >> "$DEBUG_LOG"
fi
fi
}
#* ======================================================================
#* BEISPIELAUFRUFE:
#*
#* log "${COLOR_BAD}FEHLER: Robust.HG.ini nicht gefunden in $robust_dir${COLOR_RESET}" >&2
#* log "Eine normale Info-Meldung"
#* ======================================================================
#?──────────────────────────────────────────────────────────────────────────────────────────
#* Informationen Kopfzeile
#?──────────────────────────────────────────────────────────────────────────────────────────
@@ -62,7 +140,7 @@ SCRIPTNAME="opensimMULTITOOL II"
#testmodus=1 # Testmodus: 1=aktiviert, 0=deaktiviert
# Versionsnummer besteht aus: Jahr.Monat.Funktionsanzahl.Eigentliche_Versionsnummer
VERSION="V25.5.109.442"
VERSION="V25.5.113.448"
log "\e[36m$SCRIPTNAME\e[0m $VERSION"
echo "Dies ist ein Tool welches der Verwaltung von OpenSim Servern dient."
echo "Bitte beachten Sie, dass die Anwendung auf eigene Gefahr und Verantwortung erfolgt."
@@ -199,9 +277,6 @@ function hypergrid() {
return 0
}
#?──────────────────────────────────────────────────────────────────────────────────────────
#* Abhängigkeiten installieren
#?──────────────────────────────────────────────────────────────────────────────────────────
@@ -532,19 +607,62 @@ function setup_webserver() {
#* Start Stop Standalone und einzelne Instanzen
#?──────────────────────────────────────────────────────────────────────────────────────────
OPENSIM_DIR="opensim/bin" # Pfad zu OpenSim.dll (relativ/absolut)
SCREEN_NAME="opensim" # Name der screen-Session
SHUTDOWN_CMD="shutdown" # Befehl zum Stoppen (^M = Enter)
function is_opensim_running() {
if screen -list | grep -q "$SCREEN_NAME"; then
return 0 # Läuft
else
return 1 # Läuft nicht
fi
}
function standalonestart() {
cd opensim/bin || exit 1
screen -fa -S opensim -d -U -m dotnet OpenSim.dll
echo "OpenSim starten abgeschlossen."
if is_opensim_running; then
echo "OpenSim läuft bereits (Screen: $SCREEN_NAME)."
else
echo "Starte OpenSim in screen '$SCREEN_NAME'..."
cd "$OPENSIM_DIR" || exit 1
screen -fa -S "$SCREEN_NAME" -d -U -m dotnet OpenSim.dll
echo "OpenSim starten abgeschlossen."
fi
blankline
}
function standalonestop() {
screen -S opensim -p 0 -X stuff "shutdown^M"
echo "OpenSim stoppen abgeschlossen."
if is_opensim_running; then
echo "Sende Shutdown-Befehl an OpenSim..."
screen -S "$SCREEN_NAME" -p 0 -X stuff "$SHUTDOWN_CMD^M"
sleep 5 # Warte auf saubere Beendigung
if ! is_opensim_running; then
echo "OpenSim wurde gestoppt."
else
echo "Warnung: OpenSim reagiert nicht auf 'shutdown'. Versuche hartes Stoppen..."
screen -S "$SCREEN_NAME" -X quit
fi
else
echo "OpenSim läuft nicht."
fi
blankline
}
# Standalone-Service-Neustart (ohne Logbereinigung)
function standalonerestart() {
standalonestop
sleep $Simulator_Stop_wait # Wartezeit für sauberen Shutdown
standalonestart
}
function standalonestatus() {
if is_opensim_running; then
echo "✅ OpenSim läuft (Screen: $SCREEN_NAME)."
else
echo "❌ OpenSim läuft nicht."
fi
}
function validate_sim_name() {
local sim_name=$1
# Überprüfe ob der Name dem Muster sim[1-99] entspricht (case-sensitive)
@@ -5117,13 +5235,6 @@ function cleanall() {
#* ZUSAMMENFASSUNG DER FUNKTIONEN IN LOGISCHE GRUPPEN
#?──────────────────────────────────────────────────────────────────────────────────────────
# Standalone-Service-Neustart (ohne Logbereinigung)
function standalonerestart() {
standalonestop
sleep $Simulator_Stop_wait # Wartezeit für sauberen Shutdown
standalonestart
}
# Kompletter OpenSim-Neustart mit Logrotation
function opensimrestart() {
opensimstop
@@ -5851,8 +5962,9 @@ case $KOMMANDO in
# STANDALONE-MODUS #
standalonesetup) standalonesetup ;;
standalonestart) standalonestart ;;
standalonestop) standalonestop ;;
standalonestop) standalonestop ;;
standalonerestart) standalonerestart ;;
standalonestatus) standalonestatus ;;
# SYSTEM-BEREINIGUNG #
reboot) reboot ;;