¿Es posible ejecutar el trabajo cron cada 45 días? (aprox. 1 mes y medio)

¿Es posible ejecutar el trabajo cron cada 45 días? (aprox. 1 mes y medio)

Después de leer la documentación de crontab, no se me ocurre una forma de anotar el siguiente cronograma: ejecutar el script exactamente una vez cada 45 días.

¿Alguien conoce una solución elegante? Gracias.

Respuesta1

Debido a que un período de 45 días no se divide bien en semanas, meses o años del calendario gregoriano, no hay manera de restringir en qué fechas se ejecuta el script y aún así ejecutarlo todos los días que desee.

Debido a esto, necesitará ejecutar su comando todos los días y hacer que el comando regrese sin hacer nada 44 de cada 45 días.

Por ejemplo, si desea que el script se ejecute a las 03:17, el comando podría verse así:

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

Y dentro del script podrías hacer esto:

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

real things happen here

La != 0pieza puede usar un número diferente según el día en que desee que se ejecute por primera vez. Y puede optar por poner esa lógica adicional en el crontab en lugar de en el script, aunque personalmente encuentro más legible hacerlo en el script.

Tenga en cuenta que si su zona horaria utiliza el horario de verano, es posible que deba modificar lo anterior para evitar que el horario cambie un día cuando se ajuste el reloj. Los detalles exactos dependen de la zona horaria y la hora del día que elija para ejecutar su secuencia de comandos.

Respuesta2

Es posible que necesites usar dos entradas de cronjob: la primera es por un mes y la segunda por 45 días.

para cada mes use debajo de cron

0 0 1 * *  your_script

y 45 días esta entrada cron

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

Obtuve una referencia del siguiente enlace para cron schedular de 45 días

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

información relacionada