script simples para monitorar um servidor de e-mail

3

Eu gostaria de usar um script bash simples (o python seria o segundo melhor) para monitorar regularmente (de hora em hora) se o meu servidor de e-mail estiver on-line e em operação.

Eu sei que existem soluções dedicadas para esta tarefa (Nagios, ...) mas eu realmente preciso de algo simples que eu possa usar como um cronjob. Apenas para ver o servidor de email estar ativo.

Eu sei falar com um servidor de e-mail com telnet, ou seja:

telnet mail.foo.org 25
EHLO example.com
mail from:
rcpt to:
...

mas isso é interativo. É possível verificar com um script que o servidor de email está se comunicando? Obviamente, eu não quero ir todo o caminho e realmente enviar um email. Eu só quero testar se o servidor de email está respondendo.

    
por user1968963 19.04.2014 / 17:41

1 resposta

4

Você pode usar nc para testar um servidor de e-mail SMTP da seguinte forma:

$ nc -w 5 mail.mydom.com 25 << EOF
HELO mail.mydom.com
QUIT
EOF

NOTA: As opções -w 5 dizem nc para esperar no máximo 5 segundos. O servidor a ser monitorado é mail.mydom.com e 25 é a porta à qual estamos nos conectando.

Você também pode usar esta forma das opções acima se achar que seu servidor está tendo problemas com o HELO :

$ echo "QUIT" | nc -w 5 mail.mydom.com 25

NOTA: Este formulário funciona bem com o Postfix e o Sendmail!

Exemplo

Aqui estou me conectando ao meu servidor de e-mail.

$ echo "QUIT" | nc -w 5 mail.bubba.net 25
220 bubba.net ESMTP Sendmail 8.14.3/8.14.3; Sat, 19 Apr 2014 16:31:44 -0400
221 2.0.0 bubba.net closing connection
$

Se você verificar o status retornado por esta operação:

$ echo $?
0

No entanto, se nada nas outras extremidades aceitar nossa conexão:

$ echo QUIT | nc -w5 localhost 25
Ncat: Connection refused.
$

Verificando o status retornado disso:

$ echo $?
1

Juntando

Aqui está minha versão de um script chamado mail_chkr.bash .

#!/bin/bash

echo "Checking Mail Server #1"
echo "QUIT" | nc -w 5 mail.bubba.net 25 > /dev/null 2>&1

if [ $? == 0 ]; then
  echo "mail server #1 is UP"
else
  echo "mail server #1 is DOWN"
fi

echo "Checking Mail Server #2"
echo "QUIT" | nc -w 5 localhost 25 > /dev/null 2>&1

if [ $? == 0 ]; then
  echo "mail server #2 is UP"
else
  echo "mail server #2 is DOWN"
fi

Executando:

$ ./mail_chkr.bash 
Checking Mail Server #1
mail server #1 is UP
Checking Mail Server #2
Ncat: Connection refused.
mail server #2 is DOWN
    
por 19.04.2014 / 20:38