18 votos

Ejecutar una tarea cron cada 5 minutos entre dos tiempos

¿Hay alguna forma de especificar un trabajo que se ejecute cada 5 minutos entre una hora de inicio y una hora de finalización en días laborables en un crontab?

Actualización Creo que es relevante que mis horas de inicio y finalización no sean en horas redondas. Así que especificar de 9 a 5 en la columna de horas no es suficiente. Quiero de 9:30 a 17:30.

24voto

Ignacio Vazquez-Abrams Puntos 78635

Tendrás que hacerlo por partes:

30-59/5 9 * * * script.sh
*/5 10-16 * * * script.sh
0-30/5 17 * * * script.sh

1voto

Michael Kjörling Puntos 16057

Si Respuesta de Ignacio Vázquez-Abrams no funciona realmente para usted, por ejemplo porque el script necesita un gran número de parámetros o los criterios de invocación no son triviales (o no están limitados por el tiempo), entonces un enfoque alternativo es hacer una simple envoltura script, llamar al wrapper script a intervalos regulares, y hacer que el wrapper script compruebe la hora actual e invoque al scriptprincipal.

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 la sintaxis de cron permite fácilmente, a un costo relativamente pequeño de invocar un Shell y un ShellscriptShell separado regularmente.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: