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
- Erreichbarkeit (Port‑Check)
- Prozessprüfung (lokal, falls relevant)
- 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.