Toolyard

¿Qué es una expresión cron?

Los cinco campos

Una expresión cron son cinco campos separados por espacios que le dicen a un programador de tareas cuándo ejecutar algo:

En orden, de izquierda a derecha:

Minuto0-59
Hora0-23
Día del mes1-31
Mes1-12
Día de la semana0-6 (domingo = 0)

La tarea se ejecuta cada vez que la hora actual coincide con todos los campos.

Caracteres especiales

  • * cualquier valor.
  • , una lista: 1,15 es el día 1 y el 15.
  • - un rango: 1-5 es de lunes a viernes en el último campo.
  • / un paso: */10 en el campo de minutos es cada 10 minutos.

Programaciones habituales

*/5 * * * *Cada 5 minutos
0 * * * *Cada hora en punto
0 0 * * *Todos los días a medianoche
30 8 * * 1-5A las 08:30 los días laborables
0 0 1 * *A medianoche el día 1 de cada mes
0 3 * * 0A las 03:00 todos los domingos

Pega cualquier expresión en el Explicador de expresiones cron para leerla en palabras y ver sus próximas ejecuciones.

Lo que suele confundir

  • Zona horaria: cron usa el reloj del servidor, que a menudo está en UTC.
  • Día del mes y día de la semana a la vez: si están los dos, la tarea se ejecuta cuando coincide cualquiera de ellos, no los dos.
  • Segundos: el cron estándar no tiene campo de segundos. Algunos sistemas, como Quartz y Spring, añaden uno al principio, con lo que son seis campos.

Expresiones que no hacen lo que parece

ExpresiónSe queríaEn realidad se ejecuta
0 9 1-7 * 1A las 09:00 del primer lunesA las 09:00 de cada día del 1 al 7, y todos los lunes
*/15 9-17 * * 1-5Cada 15 minutos, de 9 a 17De 09:00 a 17:45 en días laborables, incluida la hora de las 17
0 0 31 * *El último día del mesSolo en los siete meses de 31 días
0 0 29 2 *Una vez al añoSolo en años bisiestos

Para el primer lunes, ejecútalo los días 1 a 7 y comprueba el día de la semana dentro del script.

Atajos

Muchas versiones de cron aceptan alias: @hourly, @daily, @weekly, @monthly, @yearly y @reboot, que se ejecuta una vez al arrancar la máquina.

Horario de verano

En un servidor con hora local, una tarea programada entre la 01:00 y las 03:00 puede saltarse la noche en que se adelanta el reloj, o ejecutarse dos veces cuando se atrasa, según la versión de cron. Programa las tareas importantes fuera de esas horas, o usa UTC en el servidor.

Herramientas de esta guía

Más guías