Expresiones cron explicadas: 15 horarios reales y las trampas de zona horaria
La sintaxis de cron cabe en una línea y, aun así, acaba confundiendo a todo el mundo, normalmente a las 2 de la madrugada la noche en que cambia el horario de verano. Aquí tienes cómo funcionan los cinco campos, una serie de horarios para copiar y las trampas que conviene conocer.
Los cinco campos
┌──────── minute (0–59)
│ ┌────── hour (0–23)
│ │ ┌──── day of month (1–31)
│ │ │ ┌── month (1–12)
│ │ │ │ ┌ day of week (0–6, Sunday = 0)
* * * * *
Cada campo acepta un valor (5), una lista (1,15), un rango (1-5), un paso (*/10) o * para todos los valores. Algunos sistemas (Quartz, AWS EventBridge) añaden un campo de segundos o de año, así que comprueba qué variante estás usando.
Horarios para copiar
| Expresión | Se ejecuta |
|---|---|
*/5 * * * * | Cada 5 minutos |
0 * * * * | Cada hora, en punto |
15 */2 * * * | A y cuarto cada 2 horas |
0 9 * * * | Todos los días a las 09:00 |
30 2 * * * | Todos los días a las 02:30 (ver la trampa del horario de verano más abajo) |
0 9 * * 1-5 | De lunes a viernes a las 09:00 |
0 18 * * 5 | Los viernes a las 18:00 |
0 0 * * 0 | Los domingos a medianoche |
0 0 1 * * | El primer día de cada mes |
0 0 1 1 * | Una vez al año, el 1 de enero |
0 8 1,15 * * | El día 1 y el día 15 a las 08:00 |
*/15 9-17 * * 1-5 | Cada 15 minutos en horario de oficina |
0 0 * * 6,0 | Medianoche los fines de semana |
0 3 * 1,4,7,10 * | Todos los días a las 03:00 en el primer mes de cada trimestre |
0 12 * * * | Todos los días al mediodía |
Puedes crear o traducir cualquier expresión a lenguaje natural con el Generador de expresiones cron, que además muestra las próximas ejecuciones.
La trampa día del mes vs día de la semana
Cuando tanto el campo día del mes como el de día de la semana están restringidos, cron estándar se ejecuta cuando coincide cualquiera de los dos, no ambos. 0 9 13 * 5 se ejecuta el día 13 de cada mes y todos los viernes, no solo el viernes 13. Para ejecutar el último día laborable o el primer lunes, programa la tarea a diario y comprueba la fecha en tu script, o usa un programador con extensiones como L y #.
Zonas horarias y horario de verano
- Los servidores y el CI funcionan en UTC. Las programaciones de GitHub Actions, la mayoría de contenedores y los programadores en la nube usan UTC. Las 09:00 en Nueva York equivalen a
0 14 * * *en invierno y a0 13 * * *en verano. Haz la conversión con el Conversor de zonas horarias, o consulta varias zonas a la vez en el Reloj mundial. - Los trabajos entre las 01:00 y las 03:00 hora local son arriesgados. Cuando los relojes se adelantan, las 02:30 no existen y el trabajo puede saltarse; cuando se atrasan, puede ejecutarse dos veces. Programa los trabajos críticos fuera de esa franja o ejecuta el programador en UTC.
- GitHub Actions puede iniciar las programaciones con varios minutos de retraso en horas de mucha carga, y se desactiva en repositorios sin actividad durante 60 días. Genera un workflow con el Generador de GitHub Actions.