Executa CronExpression entre tempos específicos (mas não na hora)

1

Eu vi algumas perguntas aqui relacionadas à configuração do CronExpressions. Mas todos parecem ter horas exatas (sem minutos especificados) como sua janela de tempo para execução.

Existe uma maneira de configurar um CronExpression para executar, digamos, a cada 5 minutos de todos os dias entre 7:37 e 21:13? Configurar para 7AM - 9PM é simples. Mas eu não consigo descobrir se existe uma maneira (talvez não seja suportada) de executar uma programação mais detalhada.

Eu tenho um aplicativo que permite aos usuários especificar agendas personalizadas. No momento, estou arredondando para cima / para baixo, para a "hora inteira" mais próxima, já que não consigo descobrir como fazer horários específicos.

Então, por exemplo, isso funciona

0 0/5 2-16? * 1-7 // é executado a cada 5 minutos entre 2h e 16h todos os dias da semana

Então, qual seria a expressão se eu quisesse executar:

a cada 5 minutos entre 2:19 e 16:13?

Ou isso não é possível (fora da criação de várias CronExpressions e tornando-a realmente confusa)

Qualquer ajuda, muito apreciada!

    
por elspoono 21.04.2018 / 14:56

1 resposta

0

Se você inserir man 5 crontab , verá o seguinte exemplo: -

   # Run on every second Saturday of the month
   0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

Aplicando isso ao seu caso: -

   0 0/5 2-16 ? * 1-7  test $(date +\%R) \> 02:19 -a $(date +\%R) \< 16:13 && YourCommand

Como alternativa, se YourCommand for um script, você poderá incorporar os testes de tempo nele.

Observe que, como o comando é chamado em múltiplos de 5 minutos após a hora, os testes de > e >= são equivalentes (da mesma forma, < e <= ); caso contrário, talvez seja necessário ajustar os limites do teste (por exemplo, >= 02:18 ), pois test não suporta >= e <= nas comparações de sequências.

    
por 21.04.2018 / 16:13