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

3

Temos cerca de cem configurações de máquina, cada uma executando tarefas cron como iniciar e parar 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 conectados às máquinas de nossos parceiros de negócios.

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

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

Portanto, é possível substituir o algoritmo de correspondência de dias de Cron ou existe outra maneira de definir facilmente uma configuração de cron para evitar que as coisas iniciem nas férias de segunda-feira?

Obrigado!

Poul
fonte
Em uma terça-feira?
William Hilsum
@ Wil, a configuração 1-5executa um script toda segunda-feira a sexta-feira, portanto, 5 vezes por semana. Apenas algumas segundas-feiras devem ser ignoradas (de acordo com algum valor de um banco de dados).
Arjan 30/01
@Arjan -: S era apenas uma coisa divertida de qualquer maneira! Eu não li todo o caminho através :( obrigado por isso!
William Hilsum

Respostas:

4

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

Eu escreveria um script de corredor que verifica um banco de dados de férias e sai se for um feriado. Tente algo como:

#! / bin / bash

HOJE = $ (data +% Y% m% d)
se grep -q $ HOJE / etc / feriados; então
   eco Ignorando férias por US $ *
   saída 0
fi

$ *
BillThor
fonte
Você deve deixar de fora os colchetes. Estou assumindo -1paradas na primeira partida (no GNU grep é -m 1). Você também pode usar -qsou > /dev/null >&2para suprimir a saída.
Dennis Williamson
@Dennis Updated. Me distraí enquanto escrevia o roteiro.
BillThor
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 útil puder ser interrogado por meio de um script, você poderá executar um trabalho cron no domingo que determine se o dia seguinte (segunda-feira) é um dia útil ou não e define / limpa um arquivo em algum lugar. Todos os trabalhos cron podem procurar a presença desse arquivo e optar por executar ou sair de acordo.

OU

Você pode substituir todas as entradas cron individuais por uma tarefa mestre que somente dispara todas as outras se o banco de dados (verificável) indicar que é um dia útil.

Linker3000
fonte