Execute um cron job a cada 5 minutos entre duas vezes

16

Existe uma maneira de especificar um job que é executado a cada 5 minutos entre um horário de início e um horário de término em dias úteis em um crontab?

Atualizar Eu acho que é relevante que meus horários de início e fim não sejam em horários redondos. Portanto, especificar 9-5 na coluna da hora não é suficiente. Eu quero 9: 30-17: 30.

    
por pythonic metaphor 21.04.2010 / 22:37

2 respostas

22

Você terá que fazer isso por partes:

30-59/5 9 * * * script.sh
*/5 10-16 * * * script.sh
0-30/5 17 * * * script.sh
    
por 21.04.2010 / 23:02
1

Se a resposta de Ignacio Vazquez-Abrams não funciona realmente para você, por exemplo, porque o script precisa de um grande número de parâmetros ou os critérios de invocação são não-triviais (ou não ligados a tempo), então uma abordagem alternativa é criar um script wrapper simples, chamar o script wrapper em intervalos regulares e fazer com que o script wrapper verifique a hora atual e invocar o script roteiro principal.

Por exemplo:

#/bin/bash

# Check to see if we should run the script now.
HOUR=$(date +%H)
MINUTE=$(date +%M)
if test $HOUR -lt 9; then exit 0; fi
if test $HOUR -eq 9 -a $MINUTE -lt 30; then exit 0; fi
if test $HOUR -eq 17 -a $MINUTE -gt 30; then exit 0; fi
if test $HOUR -gt 17; then exit 0; fi

# All checks passed; we should run the script now.
exec script.sh ... long list of parameters ...

Isso permite codificar critérios de execução mais complexos do que a sintaxe do cron permite, com um custo relativamente pequeno de invocar um shell e um script separado regularmente.

    
por 09.10.2015 / 15:26

Tags