O / usr / bin / mail tem uma fila?

1

RHEL 5

Estou usando um script de monitoramento de serviço perl (escrito por um colega que não está mais na empresa) em execução em uma caixa antiga do RHEL 5. Se um serviço estiver inativo, ele envia um alerta de e-mail para o usuário root:

            # Email administrator
            if ($retval == 0 && $config{'MAX_EMAILS'} > 0) {
                $service_restarts{$service} = 0;
                system("echo \"This notification was generated because $service was down and has been successfully restarted.\"
 | /bin/mail -s \"Monitor: $service restarted ($date)\" root");
            }

Em /etc/aliases tenho:

root:            [email protected]

Minha pergunta é: quais serviços precisam ser executados para que as mensagens enviadas para o root sejam retransmitidas para o alias externo? Se esses serviços estiverem inativos, /usr/bin/mail fila?

    
por Mike B 07.08.2018 / 19:15

1 resposta

3

mail é bastante burro e normalmente apenas envia a mensagem para um sendmail binário. Infelizmente, existem várias implementações de mail , de modo que você precisa inspecionar a documentação ou o código para ver que tipo de tratamento de erros (se houver) é feito para a versão exata em uso.

Além do serviço de email do qual sendmail faz parte - MTA (Mail Transport Agents), que no RHEL5 provavelmente seria o Sendmail ou o Postfix - provavelmente também será necessário o DNS, pois o MTA precisará realizar uma pesquisa de DNS em fooexample.blah para poder enviar para lá. Possivelmente, também, um corredor de fila do MTA, se houver uma falha temporária e o email for encerrado em um diretório de filas do MTA em algum lugar (o RHEL MTA incluirá tais executores de filas por padrão). Ah, e um sistema de arquivos, se /var ou o que estiver cheio, o MTA provavelmente não conseguirá filas de e-mails adicionais e, portanto, provavelmente não aceitará a mensagem de mail . (Especialmente se devido a algum outro erro o sistema de alerta enche /var e então mais alertas são criados e então quando ele desativa você tem que chamar a companhia de pagers porque eles desabilitaram seu pager porque ele enviou um alerta bazillion e oh eu assim não perca esses dias.)

... e uma rede funcional, dependendo de quão amplo você deseja definir serviço ... e também há serviços anti-spam opcionais, mas comumente usados; o que acontece quando o Gmail ou o Exchange está rejeitando ou descartando seus alertas como spam?

Observe também a falta de verificação de erros no system call; mail (ou uma fork ou exec call) pode falhar e, em seguida, o que? Um pouco mais sensato pode ser registrar tais falhas em algum lugar:

use Sys::Syslog;
openlog("homegrown-monitoring-101", "ndelay", "user");

system("echo ... root") == 0
  or syslog(LOG_ERR, "non-zero exit code from mail command");

E, idealmente, algo como sec.pl verifique homegrown-monitoring-101 logs e informe sobre eles (por meio de um resumo agrupado, não o habitual spam cron de um email por mensagem de log ...).

mail ou o MTA também pode deixar dead.letter arquivos em algum lugar (supondo que ele possa gravar onde deseja gravar esses arquivos) que monitoramento em teoria poderia verificar, mas se houver um novo dead.letter e seu alerta for via e-mail, você provavelmente precisa de algum outro protocolo para relatar esse erro.

Em sistemas centos 7, em vez disso, uso o pacote perl-Email-Sender over mail para enviar mensagens a locais:

#!/usr/bin/perl
use 5.16.0;
use warnings;
use Email::Sender::Simple qw(sendmail);
use Email::Simple;
use Email::Simple::Creator;

...

my $message = ...;
my $email = Email::Simple->create(
    header => [
        To      => $username . '@example.edu',
        From    => '[email protected]',
        Subject => "...",
    ],
    body => $message,
);
sendmail($email);
    
por 07.08.2018 / 21:54