Skip to content

Sim start | stop Script

OpenSim Start / Stop / Status Script

Ziel und Grundidee

Dieses Script dient der kontrollierten Verwaltung von OpenSim‑Instanzen (Start, Stop, Status) unter realistischen Serverbedingungen.

Der Fokus liegt nicht auf einem „läuft irgendwie“-Ansatz, sondern auf: – reproduzierbarem Verhalten – klaren Vorabprüfungen – eindeutigen Statusmeldungen – sauberer Trennung von OpenSim‑Konfiguration und Verwaltungslogik

Eine Instanz wird nur dann gestartet, wenn alle relevanten Vorbedingungen erfüllt sind. Fehler sollen vor dem Start erkannt werden – nicht erst im laufenden Betrieb.

Arbeitsverzeichnis: /opt/opensim

Warum /opt

  • /opt ist für optionale, eigenständige Software vorgesehen
  • klare Trennung von Systemdiensten (/usr, /bin) und Applikationen
  • saubere Backup‑ und Restore‑Strategien
  • übersichtliche Mehrinstanzen‑Struktur

Beispielstruktur

/opt/opensim/
├── bin_01/
├── bin_02/
├── bin_03/ # weitere Instanzen
├── run/
│ └── pid/
├── log/
├── status/
├── scripts/ # in Entwicklung
└── config_includes/

Wichtig: Dieses Verzeichnis ist der feste Arbeits‑ und Bezugspfad des Scripts. Pfade und Prüfungen sind darauf ausgelegt. Anpassungen sollten ausschließlich über die statischen Variablen im Scriptkopf erfolgen – nicht über verstreute Änderungen im Code.

Benutzerkonzept (kein Root‑Betrieb)

OpenSim und das Verwaltungsscript laufen nicht als root.

Beispiel

  • Benutzer: opensimuser
  • Gruppe: opensim

Gründe

  • geringeres Sicherheitsrisiko
  • keine unbeabsichtigten Systemänderungen
  • saubere Rechteverwaltung
  • bessere Nachvollziehbarkeit bei Fehlern

Root‑Rechte werden ausschließlich für Installation und initiale Systemkonfiguration benötigt – nicht für den laufenden Betrieb.

Statische Script‑Variablen (Kopfbereich)

Alle zentralen Einstellungen sind gebündelt im Kopf des Scripts definiert. Diese Variablen bilden die einzige vorgesehene Anpassungsstelle für unterschiedliche Umgebungen.

MySQL‑Konfiguration

MYSQLHOST=“local | remote | auto“
MYSQL_HOSTNAME=“127.0.0.1″ # IP oder Hostname des Datenbankservers
MYSQL_DATABASE=“opensim“
MYSQL_USER=“opensim“

  • kein Passwort im Script
  • Authentifizierung erfolgt über ~/.my.cnf

.my.cnf (Beispiel)

[client]
user=opensimuser
password=SEHR_GEHEIM
host=127.0.0.1 # optional

Robust‑Prüfung

Konfigurierbare Modi

ROBUSTMODE=“local | remote | auto“
ROBUSTHOST=“127.0.0.1″ # IP oder Domain des Gridservers
ROBUST_PORT_1=“8002″
ROBUST_PORT_2=“8003″
ROBUST_TAG=“Robust“ # eindeutige Prozess‑Identifikation

Prüfreihenfolge

  1. Erreichbarkeit (Port‑Check)
  2. Prozessprüfung (lokal, falls relevant)
  3. Automatische Entscheidung bei auto

Hintergrund

  • Robust kann auf separaten Servern laufen
  • mehrere Robust‑Instanzen möglich (Grid, Assets, Login, Testgrid)
  • reine PID‑Prüfungen sind nicht ausreichend

MySQL‑Prüfung (analog zu Robust)

Modi

  • local → lokaler Dienst wird geprüft
  • remote → nur Erreichbarkeit des Hosts
  • auto → automatische Erkennung

Wichtige Eigenschaften

  • keine Abhängigkeit vom EstateConnectionString
  • keine Auswertung von OpenSim‑INI‑Dateien
  • vollständige Unabhängigkeit von internen OpenSim‑Änderungen

Prüfungen vor dem Start einer Instanz

Eine Instanz wird nur gestartet, wenn alle Vorabprüfungen erfolgreich sind: – Pflichtdateien vorhanden – Verzeichnisse beschreibbar – Robust erreichbar – MySQL erreichbar – Ports verfügbar – PID‑Zustände konsistent

Warum dieser Ansatz

  • verhindert Zombie‑Instanzen
  • vermeidet inkonsistente Grid‑Zustände
  • spart Debug‑Zeit
  • Fehler treten vor dem Start auf

Start / Stop / Status

Aufruf

./sim_start_stop.sh start 1
./sim_start_stop.sh stop 1
./sim_start_stop.sh status 1

  • Instanznummern: 1–20 (derzeit bewusst begrenzt)
  • klare, deutschsprachige Konsolenausgaben
  • Logdateien mit Zeitstempel

Logging‑Standard

  • Konsole: ohne Datum/Uhrzeit (lesbar)
  • Logdatei: immer mit Datum/Uhrzeit

Pfad

/opt/opensim/log/opensim_<INSTNUM>.log

Monit‑Hinweis (Debian / Ubuntu)

Unterschiedliches Verhalten

Debian und Ubuntu reagieren unterschiedlich auf: – Screen‑Sessions – PID‑Dateien – forking Prozesse

Empfehlung

  • Monit nur beobachtend einsetzen
  • Start/Stop weiterhin ausschließlich über dieses Script
  • Script ist monit‑sicher, aber nicht monit‑abhängig

Voraussetzungen / Scope des Scripts

Dieses Script installiert keine Abhängigkeiten und prüft nicht, ob OpenSimulator selbst lauffähig installiert ist.

Vorausgesetzt wird eine funktionsfähige Grundinstallation: – Betriebssystem: Linux (getestet mit Ubuntu & Debian 13) – Laufzeitumgebung: – dotnet oder mono (abhängig von der OpenSim‑Version) – Datenbank: – MySQL / MariaDB (lokal oder remote) – OpenSimulator: – vollständig installiert – lauffähig getestet – konsistente Konfigurationsdateien – Benutzer & Rechte: – dedizierter Systembenutzer (z. B. opensimuser) – korrekte Datei‑ und Verzeichnisrechte – Tools: – screen – monit

Hinweise zu fehlenden Grundlagen (z. B. „kein dotnet installiert“) gehören nicht zum Kern dieses Projekts und werden – falls überhaupt – separat dokumentiert.

JSON‑Status für Web‑Auswertung (in Entwicklung)

Das Script erzeugt einen kompakten JSON‑Status pro Instanz.

Pfad

/opt/opensim/status/opensim_<INSTNUM>.json

Inhalt (Kurzfassung)

  • Instanzstatus
  • Robust‑Status
  • MySQL‑Status
  • Port‑Zustände
  • Host / IP

Einsatzgebiet

  • Web‑Dashboards
  • Grid‑Status‑Seiten
  • externe Monitoring‑Anbindungen

Projektstatus

  • stabiler Ankerpunkt: Version 0.5.2
  • Script ist produktiv nutzbar
  • geplante Erweiterungen:
  • erweiterte JSON‑Matrix
  • weiterer Doku‑Ausbau
  • optionale Automatisierung

Abschließende Bemerkung

Dieses Script ist bewusst klar, direkt und strikt.

Unklare Zustände werden nicht toleriert, sondern erkannt und gemeldet. Ziel ist kein „freundliches Verhalten“, sondern korrekte, reproduzierbare Ergebnisse.