No mundo dos nagios, você pode encadear tarefas usando manipuladores de eventos em serviços.
Os manipuladores de eventos são, na verdade, um segundo comando executado após o primeiro comando de serviço, sempre , (se ativado na configuração global und para esse serviço). O uso básico do manipulador de eventos consiste em lançá-lo com o estado do serviço e os resultados do comando. Em seguida, o script do manipulador de eventos analisa o estado do serviço (estamos OK / WARNING / CRITICAL? Foi a primeira vez que o cheque nos envia esse estado? Estado difícil ou flexível, etc) e decidimos lançar um comando. O link anterior na documentação mostra um script bash básico fazendo isso (cuidado para o manipulador de eventos ser sempre executado, mesmo após um resultado de sucesso).
Assim, você pode adicionar um manipulador de eventos em um serviço de carregamento médio, e este manipulador de eventos pode iniciar suas tarefas de manutenção consumindo o cpu quando o estado do serviço estiver OK. Ou poderia simplesmente definir um sinalizador em algum lugar do seu sistema de arquivos e sua tarefa do cron checaria o sinalizador antes de executá-lo.
Agora você pode precisar mesclar vários resultados de serviços antes de decidir se o sistema está realmente pronto para iniciar as tarefas, por vários motivos:
- verificando a média de carga e o estado da memória
- verificar banco de dados está pronto e em bom estado
- verificar se os outros dois não estão bem, mas o tempo acabou e você realmente precisa executar as tarefas ou se atrasará
Algumas verificações como check_cluster podem ajudá-lo a mesclar vários resultados de serviços e obter um serviço em um estado OK se 3 serviços em 5 forem no estado OK (por exemplo). Em seguida, você configuraria o manipulador de eventos em um serviço usando check_cluster.
O gerenciamento do status "Estou atrasado" é mais difícil. O melhor lugar para isso é o código do manipulador de eventos (ignorar status crítico ou de aviso se você estiver atrasado).
Você também pode ter restrições de períodos de tempo (exemplo: as tarefas de manutenção devem ser executadas apenas na sexta-feira). Você tem várias receitas para isso. IMHO o melhor é apenas definir um flag com o manipulador de eventos e definir os períodos de tempo com o agendador de tarefas de manutenção ( crontab ). O Nagios fornece períodos de tempo que podem ser anexados ao seu serviço, mas mesmo os últimos lançamentos do Nagios tiveram alguns erros pesados com serviços não programados para executar 7/7 24/24, bugs que forçaram a execução do próximo serviço fora do período de tempo, depois o empurraram 1 semana depois (por que 1 semana?) e nunca mais iniciaram o serviço novamente). Cron ou qualquer agendador externo fará agendamentos de manutenção melhores e mais robustos (eu não testei o agendador Shinken, talvez ele realmente suporte oficial períodos de tempo avançados )