Sem Queda 2.0
Publicado por Diego Silva 20/01/2004
[ Hits: 5.139 ]
Homepage: http://www.diegosilva.net
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.
#!/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(djspeed@bol.com.br)# ############################################# # 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 (($@) || ($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); } #############################################
Introdução a Persistência de Estrutura de Dados em Perl
Verificação de IP em blacklists
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (2)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta