Game server status checker

Od HLDS.pl
Wersja KaszpiR (dyskusja | edycje) z dnia 20:15, 27 paź 2008
(różn.) ← poprzednia wersja | zobacz aktualną wersję (różn.) | następna wersja → (różn.)
Skocz do: nawigacji, wyszukiwania

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
    • 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