Cron Dicas para não executar tarefas agendadas nos feriados (segunda-feira de um final de semana de três dias)

3

Temos cerca de cem configurações de máquinas com cada máquina executando tarefas agendadas como iniciar e interromper serviços e arquivar os arquivos de log desses serviços no final do dia em um repositório centralizado.

Uma dor de cabeça que temos é o fim de semana de três dias (estamos fechados nos feriados). Não queremos que os serviços sejam iniciados nesses dias e se conectem às máquinas de nossos parceiros de negócios.

Atualmente, fazemos isso comentando manualmente os trabalhos mais importantes e permitindo que vários erros ocorram o dia todo. Não é ideal.

Basicamente, se um trabalho tiver '1-5' definido no campo do dia, queremos que isso signifique 'dias úteis' e não de segunda a sexta '. Temos um banco de dados que registra quais dias são de fato 'dias de trabalho'

Portanto, é possível substituir o algoritmo de correspondência de dias do Cron ou existe alguma outra maneira de definir facilmente uma configuração de cron para evitar que as coisas sejam iniciadas em um feriado de segunda-feira?

Obrigado!

    
por Poul 30.01.2011 / 15:37

2 respostas

4

O Cron não suporta esse tipo de determinação. Fica muito complicado muito rápido. Aqui no Canadá, as férias não são nem consistentes entre as províncias.

Eu escreveria um script de runner que verifica um banco de dados de feriados e sai se for um feriado. Tente algo como:

#!/bin/bash

TODAY=$(date +%Y%m%d)
if grep -q $TODAY /etc/holidays; then
   echo Skipping holiday for $*
   exit 0
fi

$*
    
por 30.01.2011 / 16:36
0

Posso imaginar algumas maneiras de fazer isso, mas a solução mais prática dependerá da configuração exata de todos os trabalhos do cron. Por exemplo:

Se o banco de dados do dia de trabalho puder ser interrogado por meio de um script, você poderá executar uma tarefa cron no domingo que determina se o próximo dia (segunda-feira) é dia útil ou não e define / limpa um arquivo em algum lugar. Todas as tarefas do cron podem procurar a presença desse arquivo e optar por executar ou sair de acordo.

OR

Você poderia substituir todas as entradas do cron individuais por um trabalho mestre que só dispara todos os outros se o banco de dados (que pode ser verificado) disser que é um dia útil.

    
por 30.01.2011 / 16:30

Tags