crontab excluye solo una fecha específica

crontab excluye solo una fecha específica

¿Cómo puedo escribir un cron que excluya una fecha específica?

digamos: necesito ejecutar un crontab de 6:00 p. m. a 9:00 p. m. cada 30 minutos los fines de semana y quiero excluir solo el 10 de mayo de 2014.

¿Es posible? ¿Cómo puedo escribir esto? ¿O hay alguna alternativa para esto? Por favor recomiende.

Respuesta1

La sintaxis cron estándar es bastante simple y no admite exclusiones. En algunos casos, es posible crear una lista de varias entradas cron para implementar dicha lógica, pero eso tiende a ser tedioso y difícil de entender o mantener; Sin embargo, este enfoque no es aplicable en su caso (sobre todo porque el cron estándar no tiene noción del año calendario).

No es un gran plan complicar los comandos cron, pero puedes hacerlo con algo relativamente sencillo como:

0,30 18-20 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
0    21    * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand

(Con " 0,30 18-21" la tarea también se ejecutará a las 21:30; necesita la segunda línea si desea ejecutarla también a las 21:00, si no, omítala)

NOTA: Enalgunos crontabsdebe escapar de los signos de porcentaje (se utilizan para indicar nuevas líneas cuando se introducen datos en línea en la entrada estándar del comando), aunque no en el cron de Dillon.

El comando cron es realmente un shelllista de comandos, el ||operador de control proporcionaevaluación de cortocircuitode comandos. Los comandos de la lista se intentan uno a la vez, de izquierda a derecha, pero la ejecución se detiene cuando el primero devuelve verdadero. Si la comparación de cadenas de fecha devuelve verdadero (solo verdadero por un día) mycommandno se ejecuta, cuando la comparación de fechas devuelve falso mycommandse ejecuta.

Sin embargo, tenga en cuenta que muchas cosas pueden diferir en la forma en que cron inicia los programas. El enfoque más sólido es utilizar un script contenedor para implementar su lógica condicional.

Respuesta2

Puede utilizar X-Ypara intervalos de tiempo y */Zpara frecuencias. Dónde:

  • Xes el inicio del intervalo.
  • Yes el final del intervalo.
  • Zes solo un divisor (es decir: cada uno Z).

Para excluir una fecha, simplemente crearía mi propio guión. Dentro de este script, verifique la fecha y luego decida si desea ejecutar las siguientes instrucciones.

información relacionada