Zastanawiam się jak zrobić takie coś?
Skrypt/program sprawdza co XX czasu, czy dany proces istnieje, jeśli nie, uruchamia go w programie screen. Czytałem o tym kiedyś ale za ,,cukierka'' nie mogę sobie przypomnieć nazwy.
Chcę tego używać do automatyczne uruchamiania serwerów Counter-Strike po zaniku ich działania.
Pozdrawiam.
Edycja:
Znalazłem coś takiego
Kod: Zaznacz cały
 #!/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;
 }http://hlds.pl/ServerChecker tu opis.
Edycja:2
Zrobiłem tak, skrypt status, czyli uruchamia skrypt restart, czyli:
Kod: Zaznacz cały
NAME=Game_Server_1 EXECUTABLE=./game_server PARAMS="+set dedicated 2 +set net_ip 192.168.1. +set net_port 27733 +set sv_punkbuster 1 +set fs_homepath /path/to/server/ +exec server.cfg +map_rotate" DIR=/path/to/server/     case "$1" in     start)         if [[ `screen -ls |grep $NAME` ]]         then             echo "Error: $NAME is already running, use '$0 stop' to stop it"         else             cd $DIR             screen -dmS $NAME $EXECUTABLE $PARAMS             echo "$NAME was started."         fi     ;;     stop)         if [[ `screen -ls |grep $NAME` ]]         then             kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`             echo "$NAME was stopped"         else             echo "Error: $NAME isn't currently running"         fi     ;;     restart)         if [[ `screen -ls |grep $NAME` ]]         then             kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`         fi         cd $DIR         screen -dmS $NAME $EXECUTABLE $PARAMS         echo "$NAME was restarted"     ;;         status)         if [[ `screen -ls |grep $NAME` ]]         then             echo "$NAME is currently running"         else             echo "$NAME is NOT running"         fi     ;;     *)         echo "Usage: $0 {start|stop|restart|status}"         exit 1 esac exit 0
Problem jest z tym pierwszym, nadałem mu prawa dostępu, jak chcę uruchomić to wyświetla
Kod: Zaznacz cały
./status: line 2: use: command not found
./status: line 8: my: command not found
./status: line 9: my: command not found
./status: line 10: use: command not found
./status: line 11: use: command not found
./status: line 16: my: command not found
./status: line 22: my: command not found
./status: line 23: my: command not found
./status: line 24: my: command not found
./status: line 25: {ALRM}: command not found
./status: line 25: TimeOut: command not found
./status: line 26: syntax error near unexpected token `&'
./status: line 26: ` &Start;'