Sem Queda 2.0

Publicado por Diego Silva 20/01/2004

[ Hits: 4.788 ]

Homepage: http://www.diegosilva.net

Download semqueda.pl




Versão 2.0 do Script Sem Queda, o mesmo foi feito em perl para ser executado no shell de seu linux, ele verifica o load average atual de sua máquina, caso o mesmo esteja alto ele pode matar os processos ativos e reiniciar o sistema, causando menos dor de cabeça para o administrador.

Na versão 2.0 você encontrará mais ferramentas que faram que seu servidor não pare de responder e fique horas parado.

  



Esconder código-fonte

#!/usr/bin/perl

#############################################
################Sem queda 2.0################
#############################################
#   Checa o Nivel de Processamento do CPU.  #
# E o reinicia em caso de sobrecarregamento #
# As ações do mesmo são enviadas por e-mail #
#     para o Administrador do Sistema.      #
#                    #
#    Recomendo que o script seja agendado   #
#         na crontab do Sistema             #
#############################################
#Escrito por Diego Silva([email protected])#
#############################################

# E-mail do Administrador do Sistema
$emailadmin = "djspeed\@bol.com.br";
# não tire a \ antes do @

# Path do SendMail
$sendmail = "/usr/sbin/sendmail";

# Load Average Máximo
$loadaverage = "10.00";

# Reiniciar o Sistema quando o load average máximo for atingido?
# 1 para sim e 0 para não
$reiniciar = "1";

# Matar todos os processos antes de Reiniciar o Sistema?
# 1 para sim e 0 para não
$matar = "1";

# Matar os seguintes processos
# 1 para sim e 0 para não

# Apache
$mataapache = "1";

# ProFtpd
$mataproftpd = "1";

# Perl
$mataperl = "1";

# Mysql
$matamysql = "1";
#############################################
###########Não Mexa Em mais Nada#############
#############################################

print "=================================\n";
print "==========Sem Queda V2.0=========\n";
print "=================================\n";
print "Verificando o Sistema....\n\n";

($buf1,$buf2,$buf3)=&get_uptime_info;
print "Load Average Maximo: $loadaverage\n";
print "Load Average Atual : $buf2\n\n";
$hostname = qx/hostname/;

if($buf2 < $loadaverage) {
print "Sistema trabalhando normalmente\n";

print "=================================\n";
print "Sistema Escrito por Diego A. Silva\n";
print "E-mail de Contato: djspeed\@bol.com.br\n";
print "=================================\n"
}else{
print "Sistema sobrecarregado....\n";
print "Enviando e-mail ao administrador...\n";

open(MAIL,"|$sendmail -t");
print MAIL "To: $emailadmin\n";
print MAIL "From: $emailadmin\n";
print MAIL "Subject: Sistema Sobrecarregado [Sem Queda 2.0]\n\n";
print MAIL "Caro Administrador,\n";
print MAIL "O Sistema de $hosname está sobrecarregado.\n";
print MAIL "Trabalhando atualmente com o Load Average de $buf2.";
if($reiniciar eq"1"){
print MAIL "O Sistema está sendo reiniciado.\n";
}
if($matar eq"1"){
print MAIL "E os processos escolhidos seram matados.\n";
}
print MAIL "\nSem Queda V2.0";
close (MAIL);

if($matar eq"1"){
print "Matando os processos em execucao.\n";
if($mataapache eq"1"){system("killall -9 httpd");}
if($mataproftpd eq"1"){system("killall -9 proftpd");}
if($mataperl eq"1"){system("killall -9 /usr/bin/perl");}
if($mataperl eq"1"){system("killall -9 /usr/local/bin/perl");}
if($matamysql eq"1"){system("killall -9 /usr/sbin/mysqld");}
if($matamysql eq"1"){system("killall -9 mysqld");}
}

print "Reiniciando o Sistema...\n";
system("reboot");
}

#############################################

sub get_uptime_info {
my ($uptime,$load,$users,$res,@buf,$buf);

  if ($^O=~ /win/i) { 
    $uptime=$load=$users='<small>ERRO</small>';
  } else {

    eval {$res=`uptime`;};

    if (([email protected]) || ($res eq '') ) {
      $uptime=$load=$users='<small><font color=red>Nao foi possivel detectar</font></small>';
    } else {
      chomp($res);

      if ($res=~ s/\,*\s*load\s*averages*\s*\:*\s*(.*)//i) {
        $buf=$1;
        $buf=~ s/^\s+//;
        @buf=split(/,*\s+/,$buf);
        $load="$buf[0]";
      } else {
        $load='<small>Não foi possivel detectar</small>';
      }
      
      if ($res=~ s/\,*\s*(\d+)\s+user\(*s*\)*//i) {
        $users=$1;
      } else {
        $users='<small><font color=red>Nao foi possivel detectar</font></small>';
      }


      if ($res=~ /up\s*\:*\s*(.*)\,*/) {
        $uptime=$1;
        $uptime=~ s/day/day/igs;
        $uptime=~ s/min/minute/igs;

        $uptime=~ s/(\d+)\:(\d+)/$1 hour\(s\) $2 minute(s)/igs;
      } else {
        $uptime='<small>Nao foi possivel detectar</small>';
      }
    }
  }
  return ($uptime,$load,$users);
}

#############################################

Scripts recomendados

htt[p]erl, simulador de web server

CatBox várias funções

Tratando Exceções com o Perl

chpasswd.cgi

Monitoração Web com Perl


  

Comentários
[1] Comentário enviado por galamba em 14/05/2006 - 21:01h

Aparentemente o script parece muito bom porem quando executo ele dá o seguinte erro:
Bareword found where operator expected at ./semqueda.pl line 129, near "$uptime=$load=$users='<small><font color=red>Nao foi possivel detectar</font"
(Might be a runaway multi-line // string starting on line 123)
(Missing operator before font?)
String found where operator expected at ./semqueda.pl line 139, near "$load='"
(Might be a runaway multi-line '' string starting on line 129)
(Missing semicolon on previous line?)
syntax error at ./semqueda.pl line 123, near "small>"
(Might be a runaway multi-line '' string starting on line 54)
Unrecognized character \xE3 at ./semqueda.pl line 139.


Contribuir com comentário