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:
| Minuto | 0-59 |
| Hora | 0-23 |
| Día del mes | 1-31 |
| Mes | 1-12 |
| Día de la semana | 0-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,15es el día 1 y el 15.-un rango:1-5es de lunes a viernes en el último campo./un paso:*/10en 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-5 | A las 08:30 los días laborables |
0 0 1 * * | A medianoche el día 1 de cada mes |
0 3 * * 0 | A 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ón | Se quería | En realidad se ejecuta |
|---|---|---|
0 9 1-7 * 1 | A las 09:00 del primer lunes | A las 09:00 de cada día del 1 al 7, y todos los lunes |
*/15 9-17 * * 1-5 | Cada 15 minutos, de 9 a 17 | De 09:00 a 17:45 en días laborables, incluida la hora de las 17 |
0 0 31 * * | El último día del mes | Solo en los siete meses de 31 días |
0 0 29 2 * | Una vez al año | Solo 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.