O cron job é executado a cada 45 dias possível? (aprox. 1 mês e meio)

O cron job é executado a cada 45 dias possível? (aprox. 1 mês e meio)

Depois de ler a documentação do crontab, não consigo pensar em uma maneira de anotar o seguinte cronograma: execute o script exatamente uma vez a cada 45 dias.

Alguém conhece uma solução elegante? Obrigado.

Responder1

Como um período de 45 dias não se divide bem em semanas, meses ou anos do calendário gregoriano, não há como restringir as datas em que seu script será executado e ainda assim executá-lo em todos os dias desejados.

Por causa disso, você precisará executar seu comando todos os dias e retornar o comando em si sem fazer nada em 44 de cada 45 dias.

Por exemplo, se você deseja que o script seja executado às 03:17, o comando pode ser assim:

17 3 * * * /usr/local/bin/your-script

E dentro do script você poderia fazer isso:

#!/bin/bash
if [[ $[($(date +%s)/86400)%45] != 0 ]]
then
    return
fi

real things happen here

A != 0peça pode usar um número diferente dependendo do dia em que você deseja que ela seja executada pela primeira vez. E você pode optar por colocar essa lógica extra no crontab em vez de no script, embora eu pessoalmente ache mais legível fazer isso no script.

Observe que se o seu fuso horário usa o horário de verão, você pode precisar ajustar o acima para evitar que a programação mude em um dia quando o relógio for ajustado. Os detalhes exatos dependem de qual fuso horário e hora do dia você escolhe para executar seu script.

Responder2

Pode ser necessário usar duas entradas do cronjob: a primeira é para um mês e a segunda para 45 dias

para cada mês use abaixo do cron

0 0 1 * *  your_script

e 45 dias esta entrada cron

10 13 * * *  test $(( `date +\%s`/24/60/60\%45 )) = 41 && your_script

Recebi uma referência no link abaixo para 45 dias cron agendado

https://stackoverflow.com/questions/8699075/how-to-set-cron-job-for-every-45-days

informação relacionada