Benutzer-Werkzeuge

Webseiten-Werkzeuge


wartung:start

Dies ist eine alte Version des Dokuments!


Wartung der Gameserver

Nach einem längerem Betriebszeitraum häufen sich vielen neuen Dateien in den Verzeichnissen des Servers. Es kommen kontinuierlich Logdateien, Spraylogos und .ztmp-Dateien hinzu. In diesem Artikel wird erklärt, wie man diese Dateien automatisiert löschen kann. Für die Aufgaben ist ein Zugang zu Shell des Servers notwendig. Bei gemieteten Gameserver hat man diesen Zugriff nicht.

Logdateien löschen

Im Verzeichnis logs des Gameservers, werden die Logdateien der SourceEngine gespeichert. Es gibt nocht andere Verzeichnisse, in dem Plugins ihre Logdateien abspeichern. Mit einem einfachen Cronjob können alle Log-Dateien unterhalb des Verzeichnisses1) regelmäßig gelöscht werden. Folgender Code löscht alle Dateien2) unterhalb von /home/gs/server/, die auf .log3) enden und älter als 7 Tage4) sind.

find /home/gs/server/ -type f -path "*/logs/*" -name "*.log" -mtime +7 -delete

Als Cronjob könnte man den Befehl so eintragen:

0 6 * * 7 find /home/gs/server/ -type f -path "*/logs/*" -name "*.log" -mtime +7 -delete

So werden die Logdateien immer Sonntags um 6 Uhr gelöscht.

Logdateien komprimieren

Möchte sich der Admin noch nicht von den Logdateien trennen, so können diese komprimiert werden.

find /home/gs/server/ -type f -path "*/logs/*" -name "*.log" -mtime +7 -exec nice gzip '{}' \;

Mit dem Code werden alle Dateien unterhalb von /home/gs/server/, die auf .log enden und älter als 7 Tage sind komprimiert. Um dann z.B alle komprimierten Dateien zu löschen, die älter als 14 Tage sind, kann man einen weiteren Befehl verwenden:

find /home/gs/server/ -type f -path "*/logs/*" -name "*.log.gz" -mtime +14 -delete

Zusammen kann man die beiden Befehle als Cronjob eintragen:

10 6 * * 7 find /home/gs/server/ -type f -path "*/logs/*" -name "*.log" -mtime +7 -exec nice gzip '{}' \;
20 7 * * 7 find /home/gs/server/ -type f -path "*/logs/*" -name "*.log.gz" -mtime +14 -delete

Downloads löschen

Nach einiger Zeit sammeln sich im Verzeichnis Downloads sehr viele Spraylogos der Spieler an. Diese werden immer auf dem Server zwischengespeichert und dann an die anderen Spieler durch den Server verteilt. Da es nach einiger Zeit sehr viele Dateien werden, sollte auch diese Dateien reglmäßig gelöscht werden.
Um die Downloads zu löschen, kann folgender Befehl verwendet werden:

find /home/gs/server/server1/srcds/cstrike/downloads/ -type f -mtime +7 -delete

Mit diesem Befehl werden z.B. vom CS:S-Server server1 alles Downloads gelöscht, die älter als 7 Tage sind. Um das wieder automatisiert auszuführen, kann ein Cronjob erstellt werden:

30 6 * * 7 find /home/gs/server/server1/srcds/cstrike/downloads/ -type f -mtime +7 -delete
31 6 * * 7 find /home/gs/server/server2/srcds/cstrike/downloads/ -type f -mtime +7 -delete
32 6 * * 7 find /home/gs/server/server3/srcds/cstrike/downloads/ -type f -mtime +7 -delete

Man kann auch noch zusätzlich -path und -name bei dem find-Befehl einsetzen. Es werden dann nur Dateien gelöscht, die sich auch wirklich in */downloads/* befinden, aus 8 Zeichen vor dem Punkt bestehen und nach dem Punkt dat*5) stehen haben. Ein weiterer Vorteil ist, dass auch mehrere Server mit einem Find-Befehl in einem Verzeichnis gefahrlos von den Dateien befreit werden können.

find /home/gs/server/ -type f -name ????????.dat* -path "*/downloads/*" -mtime +7 -delete

.ztmp-Dateien löschen

Sollte der Server Fastdownload nutzen, lief aber schon zuvor einige Zeit mit Custommaps oder anderen Modifikationen, welche das Herunterladen von Dateien erfordert, wird für jede angeforderte Datei auf dem Server eine .ztmp-Datei erstellt. Es handelt um eine mit bzip2 komprimierte Datei.

find /home/gs/server/ -name *.ztmp -not -name *.dat.ztmp -delete

Der Code sorgt dafür, dass die .ztmp-Dateien im Verzeichnis downloads bestehen bleiben, da diese nie über den Fastdownload laufen können. Damit der Server nicht unnötig damit Zeit verbringt die Downloads neu zu komprimieren, werden diese Dateien6) ausgelassen. Es reicht aus, wenn dieser Befehl einmal ausgeführt wird, da in der Regel der Fastdownload nicht mehr deaktiviert wird.

Einige Admins setzten einen MasterServer ein und verlinken die Dateien auf die einzelnen Gameserver. Oft kommt es vor, dass nach einem SteamUpdate Dateien wieder entfernt wurden. Die bestehenden Symlinks sind dadurch nicht mehr gültig und verweisen auf nicht vorhandene Dateien. Diese verwaisten Symlinks lassen sich mit dem find Befehl löschen:

find -L /home/gs/server/ -type l -delete

Fertiges Script

Das Script führt alle Aufgaben nacheinander aus. Der Pfad eines Servers kann in der Variable server[1] festgelegt werden. Sollen mehrere Verzeichnisse abgearbeitet werden, können auch mehrere Arays definiert werden7).

Variable Erklärung
server[x]Es können über diese Variable beliebig viele Server eingetragen werden.
days_logGibt das Alter in Tagen der Log-Dateien an, die komprimiert werden sollen.
day_log_gzGibt das Alter in Tagen der komprimierten Log-Dateien an, die gelöscht werden sollen.
days_downloadsLegt fest, ab welchem Alter in Tagen, die Dateien im Verzeichnis downloads gelöscht werden sollen.
clean_logs1 aktviert den Komprimier-/Löschmechanismus der Log-Dateien.
clean_downloads1 aktivert das Löschen der Downloads.
clean_ztmp1 aktivert das Löschen aller ztmp-Dateien.
clean_broken_links1 aktivert das Löschen aller verwaisten Symlinks.\\Macht nur Sinn, wenn man mit Symlinks arbeitet.

Download: servercleaner.sh

#!/bin/bash

#
#Vars
#

server[1]=/home/gs/server1
server[2]=/home/gs/server2
server[3]=
server[4]=

days_log=7
days_log_gz=14
days_downloads=7

clean_logs=1
clean_downloads=1
clean_ztmp=1
clean_broken_links=0


#
#Programm-Start
#

for dir in ${server[*]}; do
[[ ! -d $dir ]] && echo "Directory $dir doesn't exist, please correct the variables server[x] in the Script." && fail=1
done

[[ "$fail" = "1" ]] && echo "Script aborted" && exit

[[ "$clean_logs" = "1" ]] && echo "Gzip *.log older than +$days_log days" && \
find ${server[*]} -type f -path "*/logs/*" -name "*.log" -mtime +7 -exec nice gzip '{}' \;
[[ "$clean_logs" = "1" ]] &&  echo "Deleting *.log.gz older than +$days_log_gz days" && \
find ${server[*]} -type f -path "*/logs/*" -name "*.log.gz" -mtime +14 -delete
[[ "$clean_ztmp" = "1" ]] && echo "Deleting *.ztmp (*.dat.zmtp is excluded)" && \
find ${server[*]} -name *.ztmp -not -name *.dat.ztmp -delete
[[ "$clean_downloads" = "1" ]] && echo "Deleting downloads, which are older then +$days_downloads" && \
find ${server[*]} -type f -name ????????.dat* -path "*/downloads/*" -mtime +$days_downloads -delete
[[ "$clean_broken_links" = "1" ]] && echo "Deleting broken symlinks" && \
find -L ${server[*]} -type l -delete
1) kann auch mehrere Server beinhalten
2) -type f
3) -name *.log
4) -mtime +7
5) .dat oder z.B. .dat.ztmp
6) -not -name *.dat.ztmp
7) server[2],server[3], …
wartung/start.1276614893.txt.bz2 · Zuletzt geändert: 2010/06/15 17:14 von DeaD_EyE