Como controlar a saída do crontab?

2

Estou tentando executar um caso de teste através do teste de automação (sahi), por isso estou executando-o repetidamente após 1 hora (via crontab).
O que eu quero é que sempre que o meu caso de teste falhar eu deveria receber o e-mail caso contrário. Agora estou recebendo e-mail se passa ou falha.
Em suma, posso enviar mensagens para uma pessoa, dependendo da saída que recebo no terminal.

Estou usando o Ubuntu 10.10.

    
por Arpit Rawat 31.08.2011 / 12:00

2 respostas

4

O pipeline funciona no cron tão bem quanto no bash. Você poderia canalizar a saída para um script, que examina e envia o email. Ou ainda mais fácil usar o grep:

# in /etc/crontab

[email protected]
SHELL=/bin/bash

# m h dom mon dow user      command
30  * *   *   *   confus    /home/confus/bin/someCommand.sh | grep -A 11 -B 10 "Error:"

Isso enviará um e-mail para a.b @ .c.de quando o erro "Error:" ocorrer na saída de someCommand.sh . Neste caso, o texto do e-mail será a saída de 10 linhas antes e 11 linhas após a ocorrência de "Erro:" (portanto, o -A para depois e -B para antes).

O email só é enviado se o computador que executa o cron tiver um servidor de correio de trabalho instalado. Um script para processar a saída é, claro, mais flexível e consideravelmente mais trabalho.

    
por con-f-use 31.08.2011 / 12:04
2

Parece que o código de saída do seu comando não está sendo configurado corretamente ou que você está enviando mensagens para o stdout, mas não o captura / redireciona. Em um sucesso, você deve retornar 0 ( exit 0 ). E em uma falha, retorne um número positivo menor que 256 ( exit 2 ). O Cron detectará o código de saída e enviará o e-mail (variável MAILTO no crontab) em um código de saída diferente de zero.

Além disso, se qualquer saída for enviada para stdout ou stderr, isso será enviado por e-mail ao usuário, independentemente do código de saída.

Veja a página de manual cron (8) para mais informações.

    
por Arcege 31.08.2011 / 15:43