Existe algum programa no Linux que execute um comando e envie um email se ele falhar?

1

Eu tenho um processo que é iniciado por: assim:

timeout 1h /app/longprocess.sh

Agora quero ser notificado por e-mail se algo der errado com isso. Imagine isso:

notifyme [email protected] timeout 1h /app/longprocess.sh

em que notifyme é um suposto comando que enviará um email para [email protected] com a saída do comando caso o comando saia com um status diferente de zero. Existe algo assim?

    
por Igor Mukhin 04.11.2015 / 10:04

3 respostas

2

O

cron já envia e-mails, se um /usr/sbin/sendmail compatível estiver instalado (por exemplo, msmtp, ssmtp, Postfix, OpenSMTPD…). Veja também: O que é o "Você tem novo mail "mensagem no Linux / UNIX?

chronic de moreutils pode lidar com a parte "somente no sucesso":

chronic timeout 1h /app/longprocess.sh
    
por 04.11.2015 / 10:36
2
sometask||echo Something Went Wrong! | mail -s E-MailSubject [email protected]

O || só executará o que estiver à direita, se o comando à esquerda retornar um código de erro diferente de zero. Esta funcionalidade está embutida no shell (estou vendo que essa pergunta tem a tag "bash"), portanto, nenhum programa externo extra é necessário para suportar essa funcionalidade. O programa "mail" é comumente pré-instalado em muitos sistemas operacionais.

Da mesma forma, você poderia fazer:

sometask&&echo Something Went Right! | mail -s E-MailSubject [email protected]

que só executaria o que acontecesse à direita se as coisas fossem bem-sucedidas. (Por "sucesso", quero dizer especificamente que "zero" é o código de retorno do comando especificado à esquerda.)

Edições: eu inicialmente escrevi isso tarde da noite e, infelizmente, uma atualização foi necessária para a precisão, e é por isso que os comentários apontaram alguns aspectos da resposta. (Obrigado MariusMatutiae e Grawity!) Decidi que, a longo prazo, é melhor corrigir a resposta do que deixá-la em um estado mais propenso a causar confusão.

    
por 04.11.2015 / 13:12
-2

Você sempre pode usar o método a seguir adicionando:

[email protected]

no seu cron e você será informado. Eu tentei isso e funcionou para mim o tempo todo.

    
por 05.11.2015 / 09:34

Tags