Na zombiemodzie chciałem zrobić autorestart serwera po crashu.
Oto pierwszy skrypt - sprawdzający czy serwer działa
Check.pl
#!/usr/bin/perl -X use Socket; #----------------------------------------------------------- # Konfiguracja (Do ustawienia według opisu) #----------------------------------------------------------- my $host = "IP musiałem zmazać"; # Adres IP serwera do sprawdzania (To jest ten zbindowany). my $port = "27018"; # 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 = "/root/zombie/restart.sh"; #----------------------------------------------------------- # Nie edytuj tego poniżej, chyba, że wiesz co robisz <img src='http://img.amxx.pl/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' /> #----------------------------------------------------------- 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; }
A to jest drugi który restartuje serwer
restart.sh
#!/bin/bash screen -AdmS zombie ./hlds_run -game cstrike +map zm_JAM -maxplayers 30 +exec server.cfg -port 27018 -master -secure
Check.pl uruchomiłem w screen i działa cały czas.
Problem jest w restart.sh, bo gdy resetuję serwa to nie zamyka poprzedniego screena o nazwie 'zombie' tylko tworzy nowy z tą samą nazwą.
W wyniku czego nie funkcjonuje jak należy.
Proszę, kogoś kto się zna żeby mi pomógł to jakoś ustawić.
Pozdrawiam.