Script para monitoramento de processos em execução no sistema

Publicado por Maurilio Alberone 22/07/2008

[ Hits: 19.571 ]

Homepage: www.peta5.com.br

Download monitora-processos.sh




Segue um script básico para monitoramento de processos executados em seu computador.

Pode ser usado para monitorar qualquer programa, apenas inserindo-os como parâmetro na execução do script, entre aspas e separados por espaço.
Cria um log com o resultado do monitoramento e envia um email caso o processo não seja encontrado em execução.

Uso no crontab de meu servidor sendo executado a cada 5 minutos e tem funcionado bem. Comentários e sugestões são bem vindas.
Maurilio - www.peta5.com.br

  



Esconder código-fonte

#!/bin/bash

#Criado por Maurilio Alberone em 30/06/2008 - maurilio@peta5.com.br
#Script para verificar se determinados processos estão em execução no seu servidor.
#Os processos a serem monitorados devem ser passados como parâmetro no momento de execução deste script, entre aspas e separados por espaço.
#Por exemplo:
#./monitora-processos.sh "apache2" "squid" "dhcpd"

#Verifica se o arquivo temporário existe e o remove.
if [ -e /tmp/processos.tmp ]; then
rm /tmp/processos.tmp
fi

#Cria os diretórios para armazenamento do log
mkdir /srv/processos/$(date +%Y)
mkdir /srv/processos/$(date +%Y)/$(date +%m)

#Executa para cada processo passado como parâmetro.
for i in "$@"; do

   #Executa o comando ps para todos os usuários e filtra com o grep o processo monitorado, depois são executados filtros inversos para excluir
   #aparições da execução do próprio grep e do nosso script. O resultado, se existir, é salvo em um arquivo temporário.
   ps aux | grep "$i" | grep -v "grep" | grep -v "monitora-processos.sh" > /tmp/processos.tmp

   #Calcula-se o número de linhas do arquivo criado acima e atribui esse valor à variável A.
   A=$(wc -l /tmp/processos.tmp | awk '{print $1}')
   
   #Se A é maior ou igual a 1 significa que o processo está em execução,
   #então é salva uma linha contendo um OK para o processo monitorado naquele momento.
   #Senão é salvo um ERRO no log e tembém é enviado um email para o administrador do sistema avisando do ocorrido.
   if [ $A -ge 1 ]; then
      echo -e "$i\tOK\t$(date +"%x\t%X")" >> /srv/processos/$(date +%Y)/$(date +%m)/$(date +%d).log
   else
      echo -e "$i\tERRO\t$(date +"%x\t%X")" >> /srv/processos/$(date +%Y)/$(date +%m)/$(date +%d).log
      echo -e "\nPor algum motivo inesperado o processo $i não está sendo executado neste momento." | mutt -s "[ALERTA] Problemas com $i em $(date +"%x  %X")" email@dominio.com.br -a  /tmp/processos.tmp
   fi
   
done

Scripts recomendados

Killer

Script de Firewall Iptables

Aprenda a falar os números de 0 a 99 em Inglês

Twitter via shell

Backup automatico em dois computadores via local e NFS


  

Comentários
[1] Comentário enviado por Maurone em 22/07/2008 - 14:35h

Esqueci de avisar que tem que criar os diretórios /srv e /srv/processos para salvar os logs. Ou simplesmente alterar o caminho em seu servidor.

[2] Comentário enviado por guino_luis em 19/06/2009 - 17:20h

Gostaria de saber como configuro o mutt para funcionar o envio do email?

[3] Comentário enviado por Maurone em 19/06/2009 - 17:33h

Guilherme,
não precisei fazer nenhuma configuração. Apenas instalei-o.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts