Game server status checker
(Różnice między wersjami)
KaszpiR (dyskusja | edycje)
(Nowa strona: =Opis= kategoria:linux Skrypt bash dla linuksa do sprawadzania czy serwer gry nadal dziala na tym samym hoscie na ktorym zostal uruchomiony skryp sprwdzajacy. Do uzycia w '''crontab...)
następna edycja →
(Nowa strona: =Opis= kategoria:linux Skrypt bash dla linuksa do sprawadzania czy serwer gry nadal dziala na tym samym hoscie na ktorym zostal uruchomiony skryp sprwdzajacy. Do uzycia w '''crontab...)
następna edycja →
Wersja z 20:15, 27 paź 2008
Spis treści |
Opis
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.
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
- 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