mirror of
https://github.com/ManfredAabye/opensimMULTITOOLS-II.git
synced 2026-07-31 03:02:24 +00:00
V25.5.113.448 standalone
This commit is contained in:
+156
-44
@@ -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 ;;
|
||||
|
||||
Reference in New Issue
Block a user