Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorial:server:automatischer_restart

Automatischer Restart der Gameserver

HL2-Server mit der Source/EP1-Engine und der OrangeBox-Engine sollten in gewissen Abständen neugestartet werden. Manche Gameserverprovider starten ihre Gameserver morgens neu. Es gibt verschiedene Möglichkeiten die einem offen stehen. Der Server kann mit manuell über die Remote-Console und automatisch mit einem Addon oder mit einem Shell-Script neugestartet werden.

Manuell neustarten

Meist ist es sinnvoll vor Clanwars den Warserver vorher neu zu starten. Dadurch, dass diese Server meistens leer sind, kann es in bestimmten Situationen1) zu starken Lags führen. Manchmal hilft ein Mapchange. Wenn das dann auch nicht hilft, bringt dann nur noch ein Neustart noch was. Mittels HLSW kann man den Server neustarten. Oftmals starten die Provider ihre Server nicht automatisch neu, wenn dieser beendet wurde2). Deswegen ist es besser, das mal zu testen, wenn der Server nicht gebraucht wird. Folgende Befehle können den Server neustarten lassen:

  • _restart
  • quit
  • exit

Plugins

Hat der Admin einen gemieteten Gameserver, dann hat er keinen Shell-Zugriff. Der Server lässt sich entweder nur durch den Anbieter automatisch neustarten oder durch ein Plugin. Für HL2-Server gibt es ein paar Plugins, welche Befehle zu bestimmten Zeitpunkten ausführen. Es wird durch den Befehl _restart der Server einfach neugestartet. Je nach Anbieter startet der Server bei Verwendung des Befehls neu. Der Admin sollte vorher mit dem Anbieter klären ob das funktioniert oder sollte es selber zuvor testen. Startet der Server nicht mehr neu, muss so oder so der Support kontaktiert werden.

Server Autorestart [SM]

Das SourceMod-Plugin Server Autorestart ermöglicht es, den Server auf einfachste Weise zu einem festgelegten Zeitpunkt neu zu starten. Der Installations-Aufwand ist minimal, wenn SourceMod bereits auf dem Server installiert ist.

Installation

Das Plugin kann mit „Get Plugin“ heruntergeladen werden. Die heruntergeladene Datei restart.smx wird muss auf den Server nach ./$mod/addons/sourcemod/plugins/ kopiert werden.

Konfiguration

Die Konfiguration ist sehr einfach. Die Konsolen-Variable sm_autorestart 1 aktiviert das Plugin. Standardmäßig ist das Plugin aktiviert. Mit der Konsolen-Variable sm_autorestart_time wird der Zeitpunkt für den automatischen Neustart gesetzt. Das Format ist HHmm3). Standard ist 05004). Soll der Server z.B. um 23:23 Uhr neugestartet werden, muss die Konsolen-Variable sm_autorestart_time auf 2323 gesetzt werden. Dies kann zur server.cfg oder zur autoexec.cfg hinzugefügt werden.

Cron Jobs [ES]

Das Event-Script Cron Jobs benötigt Mattie's Eventscripts v2.0.0.247 oder höher. Cron Jobs führt cmds zu bestimmten Zeitpunkten aus.

Installation

Nach dem Entpacken des Archives muss die Datei cron_jobs.txt bearbeitet werden. Hier ein Beispiel:

"cron_jobs"
{
	"joblist"
	{
		"04:20" "exec warn1.cfg"
		"04:24" "exec warn2.cfg"
		"04:25" "_restart"
	}
	"jobformats"
	{
		// Here you can change the possible time formats
		"%H:%M" "1"
		"%H:%M:%S" "1"
		"%y-%m-%d" "1"
		"%y-%m-%d_%H:%M" "1"
		"%y-%m-%d_%H:%M:%S" "1"
		"%A_%H:%M" "1"
		"%A_%H:%M:%S" "1"
		"%B_%H:%M" "1"
		"%B_%H:%M:%S" "1"
	}
}

Bei diesem Beispiel wird einmal die Datei warn1.cfg um 4:20 Uhr ausgeführt und um 4:24 Uhr wird die Datei warn2.cfg ausgeführt. Dies kann man nutzen, um Spieler vorher zu warnen. So könnte die Datei warn1.cfg, die nach ./$mod/cfg müsste, aussehen:

say "Server-Neustart in 5 Minuten!
say "Server-Neustart in 5 Minuten!
say "Server-Neustart in 5 Minuten!
say "Server-Neustart in 5 Minuten!
say "Server-Neustart in 5 Minuten!
say "Server-Neustart in 5 Minuten!

Eine Warnung ließe sich mit einem Eventscript realisieren.
Der Server wird dann um 4:25 Uhr neugestartet.
Das Verzeichnis addons muss in das Verzeichnis der Modifikation hoch geladen werden. Nach erfolgtem Updload muss zur autoexec.cfg noch folgende Zeile hinzugefügt werden:

es_load cron_jobs

[CS:S] Source Cronjobs [SM]

Das SourceMod-Plugin [CS:S] Source Cronjobs (SCJ) führt Befehle zu bestimmten zuvor festgelegten Zeitpunkten aus. Desweiteren unterstützt es Aufgaben zu nach x-Runden und Aufgaben zu regelmäßigen Zeitabständen.

Installation

Die Datei sourcecronjobs.txt muss selber erstellt oder nach dem Download bearbeitet werden. Hier ist ein Beispiel:

"Source Cronjobs"
{
    "1"
    {
        "type"                "time"
        "value"                "04:15"
        "task"                "exec warn1.cfg"
    }     
    "2"
    {
        "type"                "time"
        "value"                "04:20"
        "task"                "_restart"
    }     
}

Der Server würde in diesem Fall immer um genau 4:20 Uhr neustarten.
Wie im vorherigem Beispiel von des Scripts Cron Jobs kann hier die Datei warn1.cfg erstellt werden, um die Spieler vorher zu warnen.
Die Dateien des Plugins müssen in unterschiedliche Verzeichnisse kopiert werden:

Datei Verzeichnis
sourcecronjobs.sms addons\sourcemod\plugins
sourcecronjobs.txt addons\sourcemod\config
sourcecronjobs.cfg cfg\sourcemod

Nach einem Mapchange oder durch sm plugins refresh wird das Plugin geladen. Ein Serverneustart ist nicht unbedingt nötig.

Server Crontab [SM]

Das SourceMod-Plugin Server Crontab führt Befehle zu bestimmten zuvor festgelegten Zeiträumen aus. Startet der Server besonders schnell, wird er solange neugestartet, bis eine Minute verstrichen ist.

Installation

Die Datei sc_jobs.cfg muss nach dem Download bearbeitet werden. Hier ist ein Beispiel:

//
// Basic Server Crontab configuration file
//
// # = Weekday Start. Format is 0 = Sunday to 6 = Saturday
//
// # # = Weekday End. Format is 0 = Sunday to 6 = Saturday
//
// # # # = Start hour of the day. The hour is in 24h format (0-23)
//
// # # # # = End hour of the day. The hour is in 24h format (0-23)
//
// # # # # # = Start minute of the hour (0-59)
//
// # # # # # # = End minute of the hour (0-59)
//
// Use ? to ignore the current weekday/hour/minute
//
//

// Server um 4 Uhr Morgens neustarten
sc_addjob ? ? 4 4 0 1 "quit"

Die Dateien des Plugins müssen in unterschiedliche Verzeichnisse kopiert werden:

Datei Verzeichnis
sc.smx addons\sourcemod\plugins
sc_module.smx addons\sourcemod\plugins
sc_jobs.cfg cfg\sourcemod

Nach einem Mapchange oder durch sm plugins refresh wird das Plugin geladen. Ein Serverneustart ist nicht unbedingt nötig.

Mit Cronjobs neustarten (Root-Server)

Mit Cronjobs lassen sich bestimmte Aufgaben zu bestimmten Zeitpunkten erledigen. Für diese Art des automatischen Neustarts braucht man einen Root-Server. Die meisten haben sich schon eigene Startscripts für ihre Gameserver geschrieben. Wichtig ist es, dass das Startscript den Server beenden und ihn starten kann.

Vorgehensweise

Zuerst muss man sich als User in die Shell einloggen. In manchen Fällen starten Admins ihre Server über ein Shell-Script mit dem User root neu. Diese Scripts starten dann mittels sudo die Server mit einem unterprivilegiertem User neu. Je nach Situation muss man sich dann entweder als normaler User oder als root einloggen. Danach wechselt man in das Verzeichnis, in dem sich auch das Startscript befindet. In diesem Beispiel wird der Server um 4 Uhr Morgens neugestartet. Das Beispielstartscript befindet sich in /home/gameserver/script/ und heißt run.sh. Wir nutzen in diesem Beispiel das |Start,Stop und Restartscript mit Konfigdateien. Mit dem Befehl crontab -e können mehrere Zeitgesteuerte-Aufträge eingerichtet werden. Der Befehl crontab -l listet die aktuellen Crontabs auf. Da ein Cronjob hinzugefügt werden soll, muss mit crontab -e der aktuelle Crontab erweitert werden. Meist steht dort nur ein Kommentar. In manchen Fällen möchten die Admins lieber einen anderen Editor verwenden. Mit dem Befehl crontab txt_cron würde z.B. die Datei txt_cron geladen werden. Wichtig ist, dass dieser den Text mit der ASCII-Zeichencodierung im UNIX-Format abgespeichert wird. Verwendet man einen Editor unter Windows, muss darauf geachtet werden. Die letzte Zeile muss immer frei bleiben, da ansonsten die Crontabs nicht abgearbeitet werden. Hier das Beispiel:

0 4 * * * /home/gameserver/scripts/run.sh restart gungame >/dev/null

Damit der ausgegebene Text in den Logdateien nicht zu sehen ist, kann man die Ausgabe mit >/dev/null umleiten. Unterstützt das eigene Startscript den restart nicht, können auch mehrere Befehle mit && verkettet werden. Die Reihenfolge bleibt dann erhalten. Man muss den Server dann erst mit dem script stoppen und dann wieder starten. Hier zwei Beispiele:

0 4 * * * /home/gameserver/stop_gungame.sh >/dev/null && /home/gameserver/start_gungame.sh >/dev/null 
0 4 * * * /home/gameserver/gungame.sh stop >/dev/null && /home/gameserver/gungame.sh start >/dev/null 

Automatisch mit Rcon und Cron-Job neustarten (Root-Server)

Es gibt ein Perl-Script, welches Befehle mittels Rcon an den Server senden kann. Dabei ist es egal auf welchem Root-Server das Script ausgeführt wird, da es über den TCP Port des Servers eine Rcon-Verbindung aufbaut.

  1. Perl muss installiert sein. Die meisten Distributionen haben Perl bereits mit dabei.
  2. Die Perl Library Rcon::HL2 muss heruntergeladen werden. Mittels wget kann man Rcon::HL2 direkt herunterladen:
    wget http://sourceserver.info/wiki/_media/tutorial/server/rcon-hl2-0.02.tar.gz
  3. Es muss die Perl Library Rcon::HL2 installiert werden. Das Archiv muss mittels tar entpackt werden.
    tar -xzf rcon-hl2-0.02.tar.gz
  4. Die Perl Library muss jetzt installiert werden:
    cd Rcon-HL2-0.02
    perl Makefile.PL
    make
    make test
    make install (mit Root-Rechten)

    Danach sollte die Library installiert sein. Ein Perlscript kann diese Library jetzt aufrufen.

  5. Mittels eines Perl-Scriptes wird der Befehl _restart auf einem Server ausgeführt:
    #!/usr/bin/perl
    use Rcon::HL2;
    my $rcon = Rcon::HL2->new(
         hostname => "IP-Adresse oder DNS vom Server",
         password => "Rcon-Passwort",
         port     => "Server-Port",
    );
    
    $rcon->run("_restart");

    Durch den Befehl chmod u+x gungame_restart.pl wird das Script ausführbar gemacht und muss nicht mit perl scriptname.pl gestartet werden.

  6. Das Script kann mittels cron zu bestimmten Zeiten ausgeführt werden.
    0 4 * * * /home/gameserver/scripts/gungame_restart.pl >/dev/null

    Bei diesem Beispiel würde der Server um 4 Uhr Morgens neugestartet werden.

1) hängt vom Hostsystem ab
2) bei Abstürzen starten mit der Standardeinstellung die Server automatisch neu
3) 24-Stunden-Format
4) 5 Uhr morgens
tutorial/server/automatischer_restart.txt · Zuletzt geändert: 2009/10/24 14:00 (Externe Bearbeitung)