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 != 0
pieza 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