Skip to content

HTML-Seite in bash aufrufen und reagieren

nolf2Manchmal laufen gewisse Skripte jahrelang und dann fällt mir auf, dass doch entscheidende Teile fehlen, die alles kaputt machen.

Vor einer Weile schrieb ich den Artikel Windows-Spieleserver unter Linux betreiben – das dort beschriebene Setup läuft bei mir seit Jahren so. Ein bash-Script schaut nach, ob der Prozess eines Spieleservers läuft (ob Wine oder nativ ist hierbei egal) und wenn er das nicht tut, wird er gestartet. Das sorgt immerhin dafür, dass meine Server alle 99% des Jahres über laufen.

Für gut geschriebene Programme stellt dieses simple Setup auch kein Problem dar. Wenn diese die Flügel hochreißen, beenden sie sich zumeist ordnungsgemäß und können neu gestartet werden.

Nicht so beim Serverprogramm von “No One Lives Forever 2” – sobald ich dieses starte, läuft es aber verliert irgendwann die Verbindung zum Internet. Mein bisheriges Skript reagiert darauf nicht, da die .exe weiterhin läuft.

Ich habe aber unter dieser Adresse ein Web-Frontend laufen, welches mir zuverlässig anzeigt, ob der NOLF2-Server noch ansprechbar ist.

Zuerst dachte ich, ich müsste einfach nur prüfen, ob die Phrase “OFFLINE” auf der Seite auftaucht und wenn ja, den Server killen und neu starten lassen. Diese Idee erwies sich jedoch als relativ dämlich – denn sobald sich ein Spieler “OFFLINE” nennt, kann er das Programm damit zum Absturz bewegen. Auch benötigt das Programm einige Zeit um die Karten zu laden und mein Webinterface cacht die Anfragen für einige Sekunden.

Ich endete bei dieser Lösung – mit diesem Skript wird gescannt ob der Server online ist. Falls er das ist, wird sofort abgebrochen. Ist er offline, wird nach 90 Sekunden erneut geprüft. Das reicht aus um das Teil zuverlässig erreichbar zu machen:

#!/bin/bash
# if online is NULL, it's down. May change maps, so wait and check again:
if [ -z "$(curl -sSf http://hirnschwund.net/?s=4 | grep "ONLINE")"]; then
echo "Shit is offline"
sleep 90
fi
if [ -z "$(curl -sSf http://hirnschwund.net/?s=4 | grep "ONLINE")"]; then
echo "Shit is still offline"
echo "Killing process"
pkill NOLF2Srv.exe
sleep 2
echo "Starting server"
nohup xvfb-run -n 666 wine NOLF2Srv.exe >/dev/null 2>/dev/null &
else
echo "NOLF2 is running, leave."
fi

Dieser Beitrag hat 0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

An den Anfang scrollen