PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : F.E.A.R. Server Checkup Skript



Gargi
27.04.2009, 22:56
In Anlehnung zum F.E.A.R. Dedicated Server Tutorial (http://www.gargi.org/showthread.php?t=1512) habe ich einmal über ein Script nachgedacht, das einwenig über den Status des Servers wacht. Die Idee dabei war, dass das Script über einen Crontab-Eintrag in kurzen regelmäßigen Abständen prüft, ob der F.E.A.R. Server läuft. Ist dies der Fall, dann überprüft das Script, ob der Server eventuell am Überlaufen ist. D.h. ist die CPU Last über einen speziell festgelegten Schwellenwert, dann werden die Prozesse gekillt und der Server neu gestartet. Ich habe das einwenig ausgebaut, und hierbei zwei parallel laufende F.E.A.R. Server in die Überwachung genommen.

Vorbereitung für zwei Server:

Die zwei Server werden über ein eigenes Startskript aufgerufen. Zudem kopieren wir die Server Binary auf einen eienen Namen, damit der Prozess später anhand seines Namens gefunden und zur Not beendet werden kann.

Ich gehe davon aus, dass der User, meinfear heißt. Sein Verzeichnis liegt unter /home/meinfear. Das Fear Verzeichnis lautet FEAR. Das Script müsst Ihr dann entsprechend an Eure Gegebenheiten anpassen.

Die Startdatei kopieren wir wie folgt:


cp start.sh start2.sh

Die Binary:


cp fearserver.bin fearserver2.bin

In der Startdatei (start.sh und start2.sh) ändert den Inhalt etwas ab. Zum einen muss in Euer Homeverzeichnis gewechselt werden:

cd /home/meinfear/FEAR

Danach noch hinter den ./fearserver.bin die Ergänzung -optionsfile mit dem ABSOLUTEN Pfad zu Eurer Serverkonfigurationsdatei. Z.B.:

./fearserver.bin -optionsfile /home/meinfear/FEAR/ServerOptions/ServerOptions.txt

Speichert die Änderungen entsprechend ab. Dann legt im Verzeichnis /bin die Datei wie folgt an:

feartest

#!/bin/sh

# F.E.A.R. Dedicated Checkup Script by Pierre "Gargi" Kretschmer

top -b -n 1 | grep fearserver.bin
server1=$?
top -b -n 1 | grep fearserver2.bin
server2=$?
if [ \( $server1 = 1 \) -o \( $server2 = 1 \) ]; then
pkill -u meinfear
killall -s7 fearserver.bin
killall -s7 fearserver2.bin
su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh'
su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh'
rm /var/log/fearcheck.log
echo "No active F.E.A.R. Server found. Starting new Killerspiele sessions!" > /var/log/fearcheck.log
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server start" meine @ emailadresse.de < /var/log/fearcheck.log
exit 1

else

fear1load=$(top -b -n 1 | grep fearserver.bin | cut -d " " -f20)
fear2load=$(top -b -n 1 | grep fearserver2.bin | cut -d " " -f20)

if [ $fear1load -gt 30 ]; then
pkill -u meinfear
killall -s7 fearserver.bin
killall -s7 fearserver2.bin
su meinfear -c 'screen -S server1 -d -m /home/fear/meinFEAR/start.sh'
su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh'
rm /var/log/fearcheck.log
echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" meine @ emailadresse.de < /var/log/fearcheck.log
exit 1

elif [ $fear2load -gt 30 ]; then
pkill -u meinfear
killall -s7 fearserver.bin
killall -s7 fearserver2.bin
su meinfear -c 'screen -S server1 -d -m /home/meinfear/FEAR/start.sh'
su meinfear -c 'screen -S server2 -d -m /home/meinfear/FEAR/start2.sh'
rm /var/log/fearcheck.log
echo "Fear Server had to be restarted because of too high CPU load" > /var/log/fearcheck.log
mail -a "Content-Type: text/plain; charset=UTF-8" -s "[System] F.E.A.R. Server restart" meine @ emailadresse.de < /var/log/fearcheck.log
exit 1

else
rm /var/log/fearcheck.log
echo "server load ok" > /var/log/fearcheck.log
fi
fi


Zu Beginn prüft das Script also, ob beide Server aktiv sind. Sind es diese nicht, oder fehlt einer der beiden Server, dann werden alle Prozesse aus dem Bereich "gekillt" und der Server neu gestartet. Fehlt wieder ein Server, wird dies beim nächsten Test wieder ausgelöst, bis alle beiden Server aktiv sind. Sind beide Server vorhanden, dann wird getestet, ob die Auslastung der einzelnen Server über 30% liegt. Sollte das der Fall sein, werden auch hier alle Prozesse getötet und die beiden Server neu gestartet. Auch hier gibt es dann eine E-Mail als Benachrichtigung. Sollte der Load unter 30 % liegen, dann passiert gar nichts und der Check kommt dann zum nächsten Lauf wieder. Man kann dieses Script dann über die Crontab beispielsweise alle 2 Minuten aufrufen.

Vergesst nicht, das Skript ausführbar zu machen:


chmod +x /bin/feartest

Das Skript startet zwei eigene Screen Sessions für den gleichen User. Um die Screensession aufzurufen, macht das als eingeloggter User mit einem


screen -r server1

oder


screen -r server2

Ihr könnt dann auch im Script die Bezeichnung der Sessions individuell ändern. Dies findet über dem screen Parameter -S statt.

Den Schwellenwert von den voreingestellten 30 % könnt Ihr wenn Ihr wollt auch individuell ändern. Diesen findet Ihr im if Bereich hinter dem Prüfwert -gt. Wenn ein Server generell höhere Last hat, dann kann man die auch mit entsprechend unterschiedlichen Werten versehen.

Viel Spaß beim Basteln!

Euer
Gargi