Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorial:server:response_check

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tutorial:server:response_check [2009/05/03 15:37]
DeaD_EyE
tutorial:server:response_check [2010/08/22 12:31] (aktuell)
DeaD_EyE Fehler im Script behoben, Datei aktualisiert
Zeile 23: Zeile 23:
 </code> </code>
 ===== Shell-Script ===== ===== Shell-Script =====
-Mit diesem Shell-Script werden aus der Datei ''servers.lst'' Adressen zu HL2-Gameservern abgearbeitet. In der Datei muss pro Zeile IP:PORT des zu scannenden Servers eingetragen werden.\\  +Mit diesem Shell-Script werden aus der Datei ''watchdog_servers'' Adressen zu HL2-Gameservern abgearbeitet. In der Datei muss pro Zeile IP:PORT des zu scannenden Servers eingetragen werden.\\  
-Hier ein Beispiel (servers.lst): +Hier ein Beispiel (watchdog_servers): 
-<code>sourceserver.info:27015 +<code>123.123.123:27015
-123.123.123:27015+
 123.123.123:27016</code> 123.123.123:27016</code>
-Das Script arbeitet Zeile für Zeile ab. Zuerst wird überprüft ob die Datei ''servers.lst'' vorhanden ist. Falls nicht, bricht das Script ab. Ist die Datei vorhanden, wird in einer Schleife die IP mit Port aus der Liste ausgelesen. Danach wird die Prozessid mithilfe von ''lsof'' in der Variable'' $pid'' gespeichert. Falls der Server nicht vorhanden ist((IP:PORT ist nicht belegt)) endet das Script. In diesem Fall läuft der Server einfach nicht. Wenn eine PID ausgelesen werden kann, speichert das Script die Ausgabe von qstat in der Variable $response. In diesem Fall ist nur der Inhalt "no response" oder "DOWN" von Bedeutung. Trifft eines der beiden Fällen zu, ist der Server hängen geblieben. Der Prozess, dessen PID in der Variable $pid gespeichert wurde, wird dann mittels ''kill $pid'' beendet. Damit der Server automatisch neustartet, muss er entweder zuvor mittels ''-autoupdate'' gestartet worden sein oder ein anderes Script muss an dieser Stelle einspringen, um den Server wieder zu starten.\\ \\  +Das Script arbeitet Zeile für Zeile ab. Zuerst wird überprüft ob die Datei ''watchdog_servers'' vorhanden ist. Falls nicht, bricht das Script ab. Ist die Datei vorhanden, wird in einer Schleife die IP mit Port aus der Liste ausgelesen. Danach wird die Prozessid mithilfe von ''lsof'' in der Variable'' $pid'' gespeichert. Falls der Server nicht vorhanden ist((IP:PORT ist nicht belegt)) endet das Script. In diesem Fall läuft der Server einfach nicht. Wenn eine PID ausgelesen werden kann, speichert das Script die Ausgabe von qstat in der Variable $response. In diesem Fall ist nur der Inhalt "no response" oder "DOWN" von Bedeutung. Trifft eines der beiden Fällen zu, ist der Server hängen geblieben. Der Prozess, dessen PID in der Variable $pid gespeichert wurde, wird dann mittels ''kill $pid'' beendet. Damit der Server automatisch neustartet, muss er entweder zuvor mittels ''-autoupdate'' gestartet worden sein oder ein anderes Script muss an dieser Stelle einspringen, um den Server wieder zu starten.\\ \\  
-scanhl2.sh:+watchdog_hl2.sh:
 <code bash>#!/bin/bash <code bash>#!/bin/bash
-if [ ! -f servers.lst ]; then echo "Missing file servers.lst" &amp;&ampexit; fi + 
-for server in $(cat servers.lst); do +function init { 
- pid=$(lsof -i 4udp@$server | cut -d ' ' -f 2 | tail -n 1)  +        if [ -z "`which lsof`" ]; then echo "lsof isn't installed"; return 1; fi 
- if [ ! -"$pid]; then +        if [ ! -f ~/qstat ]; then echo "qstat isn't installed"; return 1; fi 
- response=$(./qstat -a2s $server -nh -timeout 40| tr -s ' ' | cut -d ' ' -f 2-) +        if [ ! -f ~/watchdog_servers ]; then echo &quot;~/watchdog_servers doesn't exists&quot;; return 1; fi 
- if [ "$response"no response" -"$response&quot;DOWN" ]; then  +        return 0 
- kill $pid +
- fi + 
- fi +function not_response { 
-done</code> +        ~/qstat -a2s $1 -nh -timeout 20 | egrep -q 'no response|DOWN' 
-Das Script kann auch {{:tutorial:server:scanhl2.sh|hier}} heruntergeladen werden.+
 + 
 +function get_pid { 
 +        lsof -i 4udp@${1} | cut -d ' ' -f2 | tail -n 1 
 +
 + 
 +function parse_list { 
 +        cat watchdog_servers | tr -d \r 
 +
 + 
 +function kill_dead_server { 
 +        echo -en ";Testing ->; $1\t\t\t" 
 +        if not_response $1; then 
 +                pid=`get_pid $1` 
 +                [-z "$pid]] && echo "[Not Running]" 
 +                [[ ! -"$pid]] &amp;& kill $pid && echo "[Restarted]"
 +        else 
 +        echo "[OK]" 
 +        fi 
 +
 + 
 +init || exit 
 +for server in `parse_list`; do 
 +        kill_dead_server $server 
 +done 
 +</code> 
 +Das Script kann auch {{:tutorial:server:watchdog_hl2.sh|hier}} heruntergeladen werden.
  
 ===== Cronjob einrichten ===== ===== Cronjob einrichten =====
 Für jeden User unter Linux lassen sich Cronjobs einrichten, die zu bestimmten Zeitpunkten oder in bestimmten Abständen Befehle ausführen. Mit dem Befehl ''crontab -e'' können die Cronjobs des aktuellen angemeldeten Users bearbeitet werden. Wie ein Cronjob aufgebaut ist, kann in dem Wikipedia-Artikel [[wpde>Cronjob]] nachgelesen werden.\\  Für jeden User unter Linux lassen sich Cronjobs einrichten, die zu bestimmten Zeitpunkten oder in bestimmten Abständen Befehle ausführen. Mit dem Befehl ''crontab -e'' können die Cronjobs des aktuellen angemeldeten Users bearbeitet werden. Wie ein Cronjob aufgebaut ist, kann in dem Wikipedia-Artikel [[wpde>Cronjob]] nachgelesen werden.\\ 
 Das Script kann z.B. jede Minute aufgerufen werden:\\  Das Script kann z.B. jede Minute aufgerufen werden:\\ 
-<code>*/01 * * * * ~/qstat/qstat+<code>*/1 * * * * ~/watchdog_hl2.sh &>/dev/null
  
 </code> </code>
 Die letzte Zeile muss immer leer bleiben, damit die Cronjobs auch ausgeführt werden. Die letzte Zeile muss immer leer bleiben, damit die Cronjobs auch ausgeführt werden.
tutorial/server/response_check.1241357873.txt.bz2 · Zuletzt geändert: 2009/10/24 13:51 (Externe Bearbeitung)