ServerChecker
(Różnice między wersjami)
(Drobne.) |
(+Lnk, Drobne.) |
||
Linia 1: | Linia 1: | ||
'''ServerChecker''' – Skrypt napisany w Perl'u, dzięki któremu osiągniemy większy uptime serwera ;). | '''ServerChecker''' – Skrypt napisany w Perl'u, dzięki któremu osiągniemy większy uptime serwera ;). | ||
− | Generalnie chodzi o to, że dzięki temu, gdy serwer przestanie odpowiadać (''zawiesi się'') to skrypt wykona odpowiedni skrypt, | + | Generalnie chodzi o to, że dzięki temu, gdy serwer przestanie odpowiadać (''zawiesi się'') to skrypt wykona inny odpowiedni skrypt, bądź inną komendę odpowiedzialną za restart serwera gry, bez interwencji administratora. |
− | Bardzo przydatne, jeżeli testujemy różne dodatki, które mają wycieki pamięci, a chcemy, aby ludzie mogli grać na | + | Bardzo przydatne, jeżeli testujemy różne dodatki, które mają wycieki pamięci, a chcemy, aby ludzie mogli grać na serwerze bez większych przeszkód. |
== Skrypt == | == Skrypt == | ||
Linia 64: | Linia 64: | ||
* [[HLDS - skrypcior]] | * [[HLDS - skrypcior]] | ||
* [[SRCDS - skrypcior]] | * [[SRCDS - skrypcior]] | ||
+ | |||
+ | == Linki == | ||
+ | * [http://www.int64.org/docs/gamestat-protocols/index.html Protokoły Gier] | ||
+ | ** [http://www.int64.org/docs/gamestat-protocols/halflife.html Protokół Counter-Strike'a w wersji 1.6] | ||
+ | ** [http://www.int64.org/docs/gamestat-protocols/source.html Protokół Counter-Strike'a w wersji Source] |
Wersja z 18:05, 6 wrz 2006
ServerChecker – Skrypt napisany w Perl'u, dzięki któremu osiągniemy większy uptime serwera ;).
Generalnie chodzi o to, że dzięki temu, gdy serwer przestanie odpowiadać (zawiesi się) to skrypt wykona inny odpowiedni skrypt, bądź inną komendę odpowiedzialną za restart serwera gry, bez interwencji administratora.
Bardzo przydatne, jeżeli testujemy różne dodatki, które mają wycieki pamięci, a chcemy, aby ludzie mogli grać na serwerze bez większych przeszkód.
Skrypt
#!/usr/bin/perl -X use Socket; #----------------------------------------------------------- # Konfiguracja (Do ustawienia według opisu) #----------------------------------------------------------- my $host = "x.x.x.x"; # Adres IP serwera do sprawdzania (To jest ten zbindowany). my $port = "27015"; # Port serwera, na którym chodzi. use constant CHECKEVERY => 90; # Jak często sprawdzać serwer ? (Tutaj ustawiono co 90 sekund). use constant TIMEOUT => 20; # Jak długo czekać na jego odpowiedź zanim go zrestartujemy. # Poniżej podaj ścieżkę do skryptu uruchamiającego/restartującego serwer. # Oczywiście może to być także zwykła komenda zawierające odpowiednie opcje. my $cmd = "/home/hlds_l/scripts/hlds restart"; #----------------------------------------------------------- # Nie edytuj tego poniżej, chyba, że wiesz co robisz :) #----------------------------------------------------------- my $MAXLEN = 128; my $msg="\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00"; my $RET = "NONE!"; $SIG{ALRM} = sub { &TimeOut }; &Start; sub CheckServer { my $ipaddr = inet_aton($host); my $portaddr = sockaddr_in($port, $ipaddr); $RET = "NONE!"; socket(SOCKET, PF_INET, SOCK_DGRAM, getprotobyname("udp")) or die "socket: $!"; send(SOCKET, $msg, 0, $portaddr) == length($msg) or die "Error Sending Query.\n"; alarm(TIMEOUT); recv(SOCKET, $RET, $MAXLEN, 0); close SOCKET; sleep(CHECKEVERY); } sub Start { while (1) { &CheckServer; } } sub TimeOut { if ($RET eq "NONE!") { print "SERVER DOWN, RESTARTING!\n"; $STARTSERV = `/usr/bin/perl -w $cmd`; print $STARTSERV . "\n"; } sleep(CHECKEVERY); close SOCKET; }
And again PawelS saves the world ;)