#!c:\Perl\bin\perl.exe #------------------------------------------------------------------------------# # Ronaldo Russel Droique Neris, 12/08/2005 # # ronas@rrussel.org # # # # Programa para monitorar os servidores e enviar e-mail # # em caso de indisponibilidade # # # # O monitoramente é feito através de pings e a lista dos servidores deve estar # # dentro de um arquivo que será apontado pela variável $ArqConfig # # # # Este script foi feito para todar no ActivePerl, na Plataforma rWindows. Para # # outras configuracoes, algumas adaptacoes podem ser necessarias, mas nada que # # seja trabalhoso # #------------------------------------------------------------------------------# # # # ATENCAO, TERMOS DE UTILIZACAO DOS MEUS SOFTWARES/TUTORIAIS LIVRES. # # # # Por se tratarem de softwares/tutoriais livres e sem valor comercial, # # alguns fatos devem ser observados. # # # # No desenvolvimento dos meus softwares/tutoriais, eu me preocupo em # # criar produtos da mais alta qualidade, porem nao ofereco garantias # # de estarem livres de erros. # # # # Meus softwares/tutoriais sao disponibilizados para que sejam utilizados # # por "conta e risco" dos interessados. # # # # Nao ofereco garantias de performance ou comercializacao para qualquer # # que seja o proposito ou intencao particular de uso. # # # # Nenhuma comunicacao oral ou escrita, bem como informacoes passadas # # por mim, irao criar qualquer tipo de garantia. # # Nao poderei ser acusado de forma direta, indireta, especial ou incidental # # em consequencia de danos causados pelo uso, desuso, mau-uso, # # indisponibilidade ou qualquer que seja os possiveis problemas apresentados # # ou causados pelos softwares/tutoriais. # # # # Os softwares/tutoriais sao livres para que sejam alterados, nao sendo # # necessario citar a origem, nem o criador. # # # #------------------------------------------------------------------------------# use Net::Ping; use Net::SMTP; $servidor = 'servidor.smtp.com.br'; $nome_remetente = 'Alerta'; $endereco_remetente = 'alerta@servidor.smtp.com.br'; $email_admin = 'ronas@rrussel.org'; $assunto = 'Servidor Indisponível ...'; $ArqConfig = 'C:\Ronaldo\Projetos\Perl\ServerMonitor\servidores.txt'; # Obtem a lista dos servidores ... &obter_lista_servidores; # Pinga os servidores ... $p = Net::Ping->new(); foreach $host (@host_array) { if ( ! $p->ping($host) ) { &enviar_email($host); # Envia e-mail caso o servidor não seja alcançado ... } } $p->close(); sub enviar_email() { ($dummy, $minutos, $horas, $dia, $mes, $dummy, $dummy, $dummy) = localtime(time); $conexao_smtp = Net::SMTP->new("$servidor", Debug => 1) or die "Não foi possível criar uma conexão com o servidor!\n"; $conexao_smtp->mail($endereco_remetente); $conexao_smtp->to($email_admin); $conexao_smtp->data(); $conexao_smtp->datasend("To: $email_admin\n"); $conexao_smtp->datasend("From: $nome_remetente\n"); $conexao_smtp->datasend("Replay-To: $endereco_remetente\n"); $conexao_smtp->datasend("Subject: $assunto\n"); $conexao_smtp->datasend("\n\n... AVISO ...\n\n"); $conexao_smtp->datasend("Servidor $_[0] indisponível, $dia/$mes $horas:$minutos\n"); $conexao_smtp->dataend(); # Not datasend! $conexao_smtp->quit; } sub obter_lista_servidores() { open( INFILE, "<$ArqConfig" ) || die "Não foi possível abrir o arquivo de configurações!"; while ( ) { $host = $_; chomp($host); push(@host_array, $host); } close( INFILE ); }