10.02.2026, 12:50
Code Review: sim_start_stop.sh
Was sehr gut ist
Struktur & Philosophie – Die klare Trennung von Prüfung, Logging und Aktionen ist vorbildlich. Der Kommentar "Keine Magie, keine Endlosschleifen" wird auch eingehalten.
Logging – Die doppelte Ausgabe (Konsole mit Farbe, Datei mit Timestamp) ist sauber gelöst. Die Trennung in log_info/warn/err/ok macht den Output übersichtlich.
abbruch_oder_status – Eine elegante Lösung, damit status immer durchläuft, während start bei Fehlern abbricht.
Robust/MySQL-Modi – Das auto/local/remote-System ist flexibel und praxisnah.
Probleme & Verbesserungsvorschläge
1. Doppelter Robust-Aufruf im start-Block
Der auskommentierte check_robust-Aufruf und der if-Block darunter sind ein Überbleibsel – hier sollte aufgeräumt werden.
2. Stop-Timeout potenziell sehr lang
Nach dem quit wartet das Script im schlechtesten Fall 5 Minuten (20 × 15 Sekunden). Eine Statusausgabe in der Schleife wäre hilfreich:
3. screen -p "${INSTNUM}" – Fenster-Tab-Logik fragil
Beim Start wird ein neues Screen-Fenster mit -t "${REGIONS_NAME}" "${INSTNUM}" erstellt – die Fensternummer ist dabei die letzte Zahl, die screen vergeben würde, nicht zwingend INSTNUM. Beim Stop wird dann blind auf -p "${INSTNUM}" zugegriffen. Das kann ins Leere laufen, wenn Fenster zwischenzeitlich umbenannt oder geschlossen wurden.
4. Kein Schutz gegen Race Conditions beim Start
Zwischen der PID-Prüfung und dem tatsächlichen Start gibt es ein kleines Zeitfenster. Nicht kritisch, aber bei einem Script das regelmäßig automatisiert läuft (z.B. per systemd/cron) sollte man das im Hinterkopf behalten.
5. mysql-Befehl ohne Credentials
Das funktioniert nur wenn ~/.my.cnf korrekt konfiguriert ist oder der Unix-Socket-Auth greift. Ansonsten schlägt der Check stillschweigend fehl und die Fehlermeldung ist irreführend. Ein Kommentar dazu wäre nützlich.
6. Kleinigkeit: Pflicht-Konfigurationsvariablen ohne Validierung
Die Variablen SCREEN_HAUPT und ERWARTETER_USER haben Platzhalterwerte (HAUPSCREEN-NAME, OPENSIMUNSER). Das Script sollte beim Start prüfen ob diese noch auf dem Default stehen:
Fazit
Ein solides, gut lesbares Admin-Script. Die größten praktischen Stolpersteine sind der doppelte Robust-Aufruf und die Screen-Fenster-Nummerierung. Alles andere sind eher Verfeinerungen als echte Fehler.
Was sehr gut ist
Struktur & Philosophie – Die klare Trennung von Prüfung, Logging und Aktionen ist vorbildlich. Der Kommentar "Keine Magie, keine Endlosschleifen" wird auch eingehalten.
Logging – Die doppelte Ausgabe (Konsole mit Farbe, Datei mit Timestamp) ist sauber gelöst. Die Trennung in log_info/warn/err/ok macht den Output übersichtlich.
abbruch_oder_status – Eine elegante Lösung, damit status immer durchläuft, während start bei Fehlern abbricht.
Robust/MySQL-Modi – Das auto/local/remote-System ist flexibel und praxisnah.
Probleme & Verbesserungsvorschläge
1. Doppelter Robust-Aufruf im start-Block
Der auskommentierte check_robust-Aufruf und der if-Block darunter sind ein Überbleibsel – hier sollte aufgeräumt werden.
Code:
# check_robust wird zweimal definiert / aufgerufen:
check_mysql || ...
if [[ "${AKTION}" == "start" ]]; then # ← Dieser Block ist überflüssig
check_robust || ...
fi
# Zeile davor ist auskommentiert, aber die Logik ist redundant2. Stop-Timeout potenziell sehr lang
Nach dem quit wartet das Script im schlechtesten Fall 5 Minuten (20 × 15 Sekunden). Eine Statusausgabe in der Schleife wäre hilfreich:
Code:
for ((i=0;i<20;i++)); do
sleep 15 # = bis zu 300 Sekunden (5 Minuten!)
log_info "Warte auf Prozessende... (${i}/20)" # ← ergänzen
[[ ! -d "/proc/${PID}" ]] && break
done3. screen -p "${INSTNUM}" – Fenster-Tab-Logik fragil
Beim Start wird ein neues Screen-Fenster mit -t "${REGIONS_NAME}" "${INSTNUM}" erstellt – die Fensternummer ist dabei die letzte Zahl, die screen vergeben würde, nicht zwingend INSTNUM. Beim Stop wird dann blind auf -p "${INSTNUM}" zugegriffen. Das kann ins Leere laufen, wenn Fenster zwischenzeitlich umbenannt oder geschlossen wurden.
4. Kein Schutz gegen Race Conditions beim Start
Zwischen der PID-Prüfung und dem tatsächlichen Start gibt es ein kleines Zeitfenster. Nicht kritisch, aber bei einem Script das regelmäßig automatisiert läuft (z.B. per systemd/cron) sollte man das im Hinterkopf behalten.
5. mysql-Befehl ohne Credentials
Code:
mysql -e "USE ${MYSQL_DB};" >/dev/null 2>&1Das funktioniert nur wenn ~/.my.cnf korrekt konfiguriert ist oder der Unix-Socket-Auth greift. Ansonsten schlägt der Check stillschweigend fehl und die Fehlermeldung ist irreführend. Ein Kommentar dazu wäre nützlich.
6. Kleinigkeit: Pflicht-Konfigurationsvariablen ohne Validierung
Die Variablen SCREEN_HAUPT und ERWARTETER_USER haben Platzhalterwerte (HAUPSCREEN-NAME, OPENSIMUNSER). Das Script sollte beim Start prüfen ob diese noch auf dem Default stehen:
Code:
if [[ "${SCREEN_HAUPT}" == "HAUPSCREEN-NAME" ]]; then
log_err "SCREEN_HAUPT ist nicht konfiguriert!"
exit 1
fiFazit
Ein solides, gut lesbares Admin-Script. Die größten praktischen Stolpersteine sind der doppelte Robust-Aufruf und die Screen-Fenster-Nummerierung. Alles andere sind eher Verfeinerungen als echte Fehler.


