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

Publicado por Maurilio Alberone 22/07/2008

[ Hits: 19.271 ]

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

Ajustando resolução do monitor

Grave arquivos em pendrive sem sistema de arquivos

Equacao de Segundo Grau em Dialog

Wallpaper aleatório para Fluxbox

Jogo da Velha


  

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