Como executar o cronjob a cada 4 horas menos 1 segundo

2

Tenho dados provenientes da API e desejo chamá-los e despejar os dados no meu banco de dados a cada 4 horas (dados do dia atual). Eu usei o seguinte:

0   */4 *   *   *

Os dados no meu relatório estão faltando alguns valores, eu estava pensando que o cronjob é chamado assim:

today       00:00:00  -> should return nothing for today results
today       04:00:00  -> should return data for today
              ....
today       20:00:00  -> should return data for today
tomorrow    24:00:00  -> should return data for today, but this is tomorrow !

Então, estou pensando em chamá-lo assim:

today       00:00:00  -> should return nothing for today results
today       03:59:59  -> should return data for today
              ....
today       19:59:59  -> should return data for today
tomorrow    23:59:59  -> should return data for today, but this is tomorrow !

Não consigo realizar este cronjob. Ou existe uma maneira melhor?

    
por Bilal Halayqa 05.02.2017 / 11:58

2 respostas

2

Segundos e tempo negativo não são possíveis no crontab. Simplesmente aguarde 59 segundos no 59º minuto da hora anterior. Exemplo de crontab:

#
# minute  0-59
# hour    0-23
# dom     1-31
# mon     1-12 (or names)
# dow     0-7  (0 or 7 is Sun, or use names)
#
59 23,3,7,11,15,19 * * * sleep 59 && /bin/datadump
    
por 05.02.2017 / 12:20
0

Infelizmente cron foi projetado para ser mais reconhecimento de padrões do que aritmética, então algo como -1 0 /4 * * * não funcionará. Você pode especificar cada hora manualmente com a vírgula, portanto, isso deve ter o resultado desejado:

59 59 3,7,11,15,19,23 * * *

A execução de um segundo antes da hora é um pouco confiante demais no seu banco de dados. Eu pessoalmente daria mais alguns segundos para finalizar (caso contrário, os dados de amanhã serão descartados).

    
por 05.02.2017 / 12:24

Tags