Ejecute un trabajo cron cada 5 minutos entre dos veces

18

¿Hay alguna manera de especificar un trabajo que se ejecuta cada 5 minutos entre una hora de inicio y una hora de finalización en días hábiles en un crontab?

Actualización Creo que es relevante que mis horarios de inicio y finalización no sean en horas redondas. Entonces, especificar 9-5 en la columna de la hora no es suficiente. Quiero 9: 30-17: 30.

metáfora pitónica
fuente

Respuestas:

24

Tendrás que hacerlo por partes:

30-59/5 9 * * * script.sh
*/5 10-16 * * * script.sh
0-30/5 17 * * * script.sh
Ignacio Vazquez-Abrams
fuente
1

Si la respuesta de Ignacio Vázquez-Abrams realmente no funciona para usted, por ejemplo, porque el script necesita una gran cantidad de parámetros o los criterios de invocación no son triviales (o no están sujetos al tiempo), entonces un enfoque alternativo es hacer un simple secuencia de comandos de envoltura, llame a la secuencia de comandos de envoltura a intervalos regulares y haga que la secuencia de comandos de envoltura verifique la hora actual e invoque la secuencia de comandos principal.

Por ejemplo:

#/bin/bash

# Check to see if we should run the script now.
HOUR=$(date +%H)
MINUTE=$(date +%M)
if test $HOUR -lt 9; then exit 0; fi
if test $HOUR -eq 9 -a $MINUTE -lt 30; then exit 0; fi
if test $HOUR -eq 17 -a $MINUTE -gt 30; then exit 0; fi
if test $HOUR -gt 17; then exit 0; fi

# All checks passed; we should run the script now.
exec script.sh ... long list of parameters ...

Esto permite codificar criterios de ejecución más complejos de lo que permite la sintaxis de cron, a un costo relativamente pequeño de invocar regularmente un shell y un script separado.

un CVn
fuente