Por que um script de monitoramento de processo usaria a saída 1; em encontrar nenhum problema?

1

Pergunta geral:

Em um servidor Linux (Centos), se um script de monitoramento de processo executado pelo cron estiver configurado para fechar com exit 1; em vez de exit 0; ao descobrir que tudo está bem e que nenhuma ação é necessária, isso é um erro?

Ou há motivos legítimos para chamar exit 1; em vez de exit 0; na condição "Tudo está bem, sem ação necessária"?

exit 0; para não encontrar problemas parece-me mais apropriado. Mas talvez haja algo que não conheço. Por exemplo, talvez haja algo específico para o Cron? Ou talvez haja uma convenção nos scripts de monitoramento de processo que 'falha' significa ' este script não precisou corrigir um problema ' (em vez do que eu esperaria, que é que exit 1; significaria ' o processo monitorado falhou '?)

Meu caso específico:

Estou vendo um script de monitoramento de processo escrito pela minha empresa de hospedagem na web. Por script de monitoramento de processo, quero dizer um script executado pelo Cron regularmente que verifica se um processo importante do sistema está em execução e, se não estiver em execução, executa ações como enviar um administrador por correio ou reiniciar o processo.

Aqui está a estrutura (generalizada) de seu script, para um serviço em execução na porta 8080 (neste caso, Apache Tomcat):

SERVICE=$(/usr/sbin/lsof -i tcp:8080 | wc -l);

if [ $SERVICE != 0 ]; then
exit 1;
else
#take action
fi

Parece bastante simples, mesmo para alguém com conhecimento limitado como eu, exceto que a parte exit 1; parece estranha. Pelo que entendi, exit 0; fecha um programa e significa para o pai que executou o programa que está tudo bem, exit n; onde n > 0 e n < 127 significa que houve algum tipo de erro ou problema.

Aqui, o script deles parece ir contra essa regra - chama exit 1; na condição em que tudo está bem e não sai depois de tomar medidas corretivas na condição do problema.

Para mim, isso parece um erro - mas minha experiência nessa área é limitada. Há casos em que chamar exit 1; na condição "Tudo está bem, nenhuma ação necessária" é mais apropriado do que chamar exit 0; ? Ou é um erro?

O contexto mais amplo é bem simples. É um VPS Centos, rodando o Plesk. O script está sendo chamado pelo Cron através do gerenciador Cron do Plesk "Tarefas agendadas". Não há camada personalizada entre o Cron e esse script que responderia de maneira incomum à chamada de saída. É um Centos VPS (em média, quase totalmente fora de série), gerenciado pelo Plesk (na medida em que existe tal coisa). O processo que está sendo monitorado por esse script é o Apache Tomcat.

    
por user568458 08.12.2012 / 15:56

1 resposta

2

Sua análise geral está correta.

Isso não soa diretamente "errado", mas definitivamente um uso "hackiano" da semântica do cron: geralmente, se o cron encontrar um script para ter um erro, ele envia o e-mail para o usuário (ou qualquer endereço configurado no crontab ).

Eu vejo esse tipo de script quando as pessoas tentam sempre receber um e-mail quando o script é executado. Eu pessoalmente prefiro a maneira "regular" do UNIX de ficar em silêncio se tudo estiver bem.

    
por 08.12.2012 / 18:02