Hallo Gameserver Admins,
ich habe mal ein Script zum automatischen Restarten eines Gameservers gebaut.
Als Gameserver sollte praktisch jeder in Frage kommen.
Schauts euch halt mal an, vielleicht könnt ihr es gebrauchen oder habt Verbesserungsvorschläge.
Das Script läuft als Cronjob, beispielsweise jede Minute.
1. Folgende Zeile in der Shell eingeben:
2. Ein Verzeichnis namens "logfiles" in /meinGameserver erstellen.
3. Mit vi eine Datei namens check.sh in /meinGameserver mit folgendem Inhalt erstellen (als Beispiel dient hier Battlefield2):
#!/bin/sh
PS=bf2; # name des gameserver-prozesses
WAIT=30; # wartezeit bevor gameserver neugestartet wird
PROCCOUNT=5; # anzahl der prozesse im regelbetrieb
GSDIR=/bf2; # pfad zum gameserver executable
EXE=start.sh; # dateiname des gameserver executables
# name des logfiles, basierend auf dem datum (check_YYYY-MM-DD.log)
LOG=$GSDIR/logfiles/`date "+check_%Y-%m-%d.log"`
COUNT=`ps -C $PS | grep -c $PS`
if [ $((COUNT)) -ge $PROCCOUNT ]; then
echo `date +%d.%m.%y` `date +%H:%M:%S` " $PS Server läuft, alles bestens." >> $LOG
else
echo `date +%d.%m.%y` `date +%H:%M:%S` "*** $PS PID nicht gefunden, $WAIT Sekunden bis Neustart..." >> $LOG
sleep $WAIT
COUNT=`ps -C $PS | grep -c $PS`
if [ $((COUNT)) -ge $PROCCOUNT ]; then
echo `date +%d.%m.%y` `date +%H:%M:%S` "*** $PS PID gefunden, Neustart abgebrochen" >> $LOG
else
echo `date +%d.%m.%y` `date +%H:%M:%S` "*** $PS Server wird neu gestartet!" >> $LOG
export TERM=vt100
cd $GSDIR
$GSDIR/$EXE
fi
fi
Alles anzeigen
Das Script is so ausgelegt, dass es die Anzahl der Prozesse zählt, mit denen der Gameserver läuft. Entspricht die Anzahl nicht dem Soll (im Script die Variable PROCCOUNT), so wartet das Script eine Zeit (Variable WAIT) und zählt dann nochmal die Anzahl der Prozesse. Wenn auch dann diese Anzahl nicht dem Soll entspricht, wird der Gameserver gekillt und neu gestartet. Wozu dieser Aufwand? Ich gehe davon aus, dass sich auch im Regelbetrieb die Anzahl der Prozesse ändern kann, beispielsweise, wenn ein Mapchange erfolgt. Deshalb die Wartezeit. Andererseits gehe ich davon aus, dass ein Gameserver nicht sauber läuft, wenn nicht die Sollstärke an Childprozessen erfüllt wird. Ich bin mir nicht wirklich sicher, ob das Sinn macht, um Kommentare wird gebeten...
Wenn man die Toleranzzeit von 30 Sekunden erhöht, sollte man natürlich berücksichtigen, dass die Intervallzeit beim Cronjob auch entsprechend erhöht wird, damit sich die Crons nicht überlappen.