Eu comecei agora a escrever um utilitário wrapper para resolver o meu próprio problema aqui, chamado cromer . Agora está trabalhando de forma básica. Quaisquer contribuições / solicitações / questões etc. são bem-vindas.
Eu tenho vários scripts de estilo de backup que são executados a partir do cron em um servidor sem cabeçalho (Ubuntu 14.04), normalmente em uma programação diária. O Cron é configurado com um servidor de e-mail para que eu receba feedback dos trabalhos. Normalmente, esses scripts de backup são gravados para serem executados sem qualquer resultado de stdout / stderr (seguindo o paradigma padrão do Unix de que "nenhuma notícia é boa"), para que não entupam minha caixa de entrada de e-mails.
Ocasionalmente, estas falhas, e eu vou receber um email imediatamente com a saída stdout / stderr. No entanto, muitas vezes essas falhas são por razões conhecidas e, em particular, são transitórias (por exemplo, elas provavelmente desaparecerão novamente no dia seguinte). Por exemplo, minha conexão com a Internet é um pouco não confiável e, ocasionalmente, as resoluções remotas do DNS falharão (suponha que isso não possa ser corrigido para os propósitos desta pergunta). Claro, isso não pode ser previsto com antecedência, portanto, reduzir a frequência do trabalho não funciona.
O que eu acho que gostaria que o cron informasse de mim depois que um determinado trabalho falhou por mais de n tentativas, ou após um certo período de tempo, então eu só posso relatórios de erros 'permanentes' que eu preciso abordar. Isso é possível?
Estou usando o cron 3.0pl1-124ubuntu2 no Ubuntu 14.04, embora esteja aberto a outros softwares do tipo cron e uma resposta mais geral (por exemplo, um wrapper que eu possa colocar em volta dos meus scripts) seria muito útil para os outros, tenho certeza.
Opções que considerei:
Eu comecei agora a escrever um utilitário wrapper para resolver o meu próprio problema aqui, chamado cromer . Agora está trabalhando de forma básica. Quaisquer contribuições / solicitações / questões etc. são bem-vindas.
Como você deseja rastrear falhas ao longo de muitos dias, você essencialmente precisa registrar os problemas, no entanto, esses "logs" não precisam ser relacionados a você e podem ser guardados apenas para o cronjob. Um wrapper em torno de seus scripts parece ser o caminho a percorrer.
maxAttempts=5
if [ -f ~/.script_fails ];then #determine the number of failures
failures=$(cat ~/.script_fails)
else
failures=0
fi
if [ $failures -lt $maxAttempts ];then #determine if failures exceeds max attempts
./script.sh > /dev/null #if so, get rid of output
else
./script.sh #otherwise keep it
fi
result=$?
if [ $result -eq 0 ];then #increment or remove counter
rm ~/.script_fails
else
failures=$failures + 1
echo $failures > ~/.script_fails
fi
isso determina quando o registro precisa ser mantido ou ignorado, de forma direta. O arquivo para rastreamento de contagens de falhas está oculto em seu diretório pessoal, portanto, você poderá verificá-lo se quiser, mas seu e-mail não deverá ver nada, a menos que as falhas fiquem muito altas.
No entanto, eu recomendaria usar o jenkins, isso facilita muito a vida quando configurado.