Game server status checker

Od HLDS.pl
Skocz do: nawigacji, wyszukiwania

Spis treści

Opis

UWAGA ten artykuł jest wyłącznie pod Linuksa


Skrypt bash dla linuksa do sprawadzania czy serwer gry nadal dziala na tym samym hoscie na ktorym zostal uruchomiony skryp sprwdzajacy. Do uzycia w crontabie.

Skrypt sprawdza wylacznie jeden serwer, czyli jka masz 3 serwery gry to musisz miec 3 rozne wpisy w crontabie do wywolywania 3 roznych skryptow rozniacych sie sekcja konfiguracyjna dla kazdego serwera osobno.


Stosuje go aby sprwawdzac czy mi sie nie zwiesza albo nie wyladowywuje mapy serwer ETQW dzialajacy na testowym modzie Dusk Mod.Problem jest taki ze serwer dziala ale:

  • moze wpasc w petle i zzera 100%cpu
  • moze cos sie skitrac i wyladowac mape

W takich przypadkach serwer nie odpowiada na sprawdzenie statusu programem Qstat, a inne skrypty sprwadzajace czy process dziala zwrwacaja info ze serwer dziala... no ale co z tego jak nikt sie nie moze do niego polaczyc.

skrypt po modyfikacji konfiguracyjnej czesci dziala niezaleznie od gry.

Wymagania

  • wymaga Qstat, najlepiej skompilowanego z svn
  • bash (shell)
  • mozliwosc listowania przez usera na ktorym dzialaja serwery gry do listowania procesow, przynajmniej wlasnych, wiekszosc ma taka opcje

Opcje

  • sprawdzanie serwer po ip/porcie, jednoznacznie definuje serwer na lokalnej maszynie
  • liczba sprawdzen statusu serwera, przewaznie 3 sprawdzenia starczaja
  • przedzial czasu w jakim serwer moze nie odpowiedziec, np jak serwer zmiena mape to nie odpowie ale nie powinnismy go ubijac, czas ten jest zalezny od sprzetowej wydajnosci serwera jak i systemu ladowania mapy przez serwer gry - sa gry gdzie nawet na super silnych maszynach ladowanie mapy trwa wieki
    • dla gier starszych niz 4 lata, npHLDS, najlepiej ustawic czas rzedzu 5 sekund
    • dla troche nowsych gier gdzie zawsze mapy troche sie laduja, np SRCDS czy ETQW najlepiej ustawic 10s
  • opcja czyszczenia pliku PID serwera gry, jak nie wiesz co to to ustaw na ""
  • opcja logowania do pliku kiedy serwer gry zostal ubity w formacie DATA,IP:PORT,PID,ILE_SPRAWDZEN (wlasciwie to ostatnie mozna olac)

Skrypt

# game server status checker by _KaszpiR_ kaszpir@gmail.com http://hlds.pl
# version 0.2 beta, use at your own risk
# License: Free of use, GPL http://www.gnu.org/copyleft/gpl.html
 
# Requirements
# - qstat, to check game server status, get svn version http://sourceforge.net/projects/qstat/
# - let (bash command, usually if you got bash then you got it aswell)
# - user ability to list of its own processess, usually its enabled
 
# configuration below
##########################################################################
QSTAT="/home/etqw/bin/qstat"; # path to qstat
Q_TYPE="-etqws"; # game server type, see qstat --help for more info
Q_SERVER_IP="87.98.234.166"; # game server ip, use ip only
Q_SERVER_PORT="27733"; # game server port
RETRY_TIME=10; # time in seconds to check server status
RETRY_MAX=3; # how many times server can be down, set it high to avoid killing server on map change
PID_FILE="/home/etqw/etqw/.dusk-27733/etqw.pid"; # server pid file, check it in server init script, change to empty if unsure
DATE_FORMAT="%Y-%m-%d %H:%M"; # date format, man date for more details, for informational purposes
LOGFILE="/home/etqw/etqw/.dusk-27744/dusk-check.log"; # where to output messahes about killed server
##########################################################################
# end of config
 
 
DATE_NOW=`date +"$DATE_FORMAT"`;
echo $DATE_NOW
echo "Checking server"
echo "  IP: $Q_SERVER_IP"
echo "Port: $Q_SERVER_PORT"
echo "Type: $Q_TYPE"
 
# qstat list only servers that are up
 
COUNTER=0
while [  $COUNTER -lt $RETRY_MAX ]; do
    echo -n "Server check $COUNTER/$RETRY_MAX: "
    if [ `$QSTAT $Q_TYPE $Q_SERVER_IP:$Q_SERVER_PORT -nh -u|wc -l` -eq 0 ]; then
        echo "down";
        let COUNTER=COUNTER+1;
        sleep $RETRY_TIME
    else
        echo "up";
        echo "We do nothing, exiting.";
        exit;
    fi
done
 
echo "Looks like server is not responding, trying to kill its process..."
 
SERVER_PID=`ps aux | grep -v grep | grep $Q_SERVER_IP | grep $Q_SERVER_PORT | awk '{print $2}'`
kill -9 $SERVER_PID >/dev/null 2>&1
if [ "$?" == "0" ]; then
    echo "$SERVER_PID killed."
    if [ -f $PID_FILE ]; then
        rm -f $PID_FILE;
    fi
    if [ -n $LOGFILE ]; then
        echo "$DATE_NOW,$Q_SERVER_IP:$Q_SERVER_PORT,$SERVER_PID,$COUNTER" >> $LOGFILE
    fi
else
    echo "$SERVER_PID not found as running process, abroting."
fi
 
# end of file 
Osobiste
Przestrzenie nazw
Warianty
Działania
HLDS.pl - Menu:
Inne
IRC
Inne sekcje:
Znajomi:
Narzędzia