Próximas ejecuciones

Cada planificador trata de forma distinta detalles como día del mes frente a día de la semana o el horario de verano. Prueba la programación en tu sistema antes de usarla en producción.

0 9 * * 1-5 se ejecuta a las 09:00 de lunes a viernes, cinco veces por semana; también vale MON-FRI. Quartz necesita segundos y un ?: 0 0 9 ? * MON-FRI. Cron no conoce los festivos, así que, si hace falta, sáltalos dentro de la propia tarea.

Cómo se usa

  1. Escribe o pega una expresión cron, o toca un ajuste rápido. El formato sigue el número de campos: 5 es crontab de Unix, 6 es Spring (con segundos), 7 o un ? es Quartz.
  2. Lee la descripción en lenguaje claro y las 10 próximas ejecuciones. Elige una zona horaria para ver cuándo se lanza allí; toca una hora para copiarla en ISO 8601.
  3. Usa el editor visual para cambiar un campo cada vez: todos los valores, un intervalo, valores concretos o un rango.
  4. Al cambiar entre Unix, Quartz y Spring la expresión se convierte cuando es posible.
  • En cron de Unix, si día del mes y día de la semana están restringidos, la tarea se ejecuta cuando coincide cualquiera de los dos (O). Quartz exige ? en uno de ellos; Spring exige que coincidan ambos.
  • En Unix los días de la semana van de 0 a 7 (0 y 7 = domingo); Quartz usa 1–7 con 1 = domingo. Los nombres como MON-FRI valen en todos.
  • Quartz y Spring también admiten L (último día), W (día laborable más cercano), 5L (último viernes) y 2#1 (primer lunes).
  • Las horas que caen en el salto del horario de verano se omiten; cada demonio cron lo trata a su manera.

Los cinco campos de Unix

Una línea de crontab estándar tiene cinco campos: minuto (0–59), hora (0–23), día del mes (1–31), mes (1–12 o JAN–DEC) y día de la semana (0–7, donde 0 y 7 son domingo, o SUN–SAT). * significa todos los valores, la coma enumera (1,15), el guion marca un rango (9-17) y la barra un intervalo (*/15 equivale a 0, 15, 30 y 45).

Así, 30 2 * * 1-5 se ejecuta a las 02:30 de lunes a viernes y 0 */6 * * * a las 00:00, 06:00, 12:00 y 18:00. Los atajos @hourly, @daily, @weekly y @monthly equivalen a 0 * * * *, 0 0 * * *, 0 0 * * 0 y 0 0 1 * *.

Diferencias de Quartz y Spring

Quartz añade un campo de segundos al principio y un año opcional al final, numera los días de la semana del 1 al 7 empezando por el domingo y exige ? en el día del mes o en el día de la semana. Spring @Scheduled usa seis campos (los segundos primero) y días 0–7. Ambos admiten L para el último día, W para el día laborable más cercano, 6L para el último viernes y 2#1 para el primer lunes del mes.

Errores habituales

En cron de Unix, si restringes a la vez el día del mes y el de la semana, la tarea se ejecuta cuando se cumple cualquiera: 0 0 13 * 5 salta todos los días 13 y todos los viernes, no solo los viernes 13. Los demonios cron usan la zona horaria del servidor salvo que se indique otra, y GitHub Actions funciona siempre en UTC. Con los cambios de horario de verano, una tarea a las 02:30 puede saltarse o repetirse según la implementación, así que usa UTC para lo crítico.

Preguntas frecuentes

¿Qué significa * * * * *?

Que se ejecuta cada minuto de cada hora de cada día: 1440 veces al día. Cada * representa todos los valores de su campo, en el orden minuto, hora, día del mes, mes y día de la semana.

¿Cómo ejecuto una tarea cron cada 5 minutos?

Con */5 * * * *. Se dispara en los minutos 0, 5, 10 y así hasta el 55, es decir, 288 veces al día. Para empezar en otro minuto, usa por ejemplo 2-59/5 * * * *.

¿Qué zona horaria usa cron?

El cron clásico usa la zona horaria local del servidor. Algunos sistemas aceptan CRON_TZ o un ajuste timeZone, los CronJob de Kubernetes tienen un campo timeZone y GitHub Actions usa siempre UTC. Elige aquí la zona para ver las horas correspondientes.

¿Qué diferencia hay entre cron de Unix y de Quartz?

El de Unix tiene 5 campos y empieza por los minutos. El de Quartz tiene 6 o 7, empieza por los segundos y puede terminar con el año, numera el domingo como 1 y necesita ? en uno de los dos campos de día.

¿Cómo programo una tarea el último día del mes?

Quartz y Spring admiten L en el día del mes: 0 0 0 L * ? en Quartz. El cron estándar de Unix no tiene L; lo habitual es ejecutar los días 28 a 31 y comprobar en el script si mañana es día 1.

¿Por qué mi tarea cron no se ejecutó a la hora prevista?

Revisa la zona horaria del servidor, que no hayas combinado sin querer día del mes y día de la semana, y que el comando funcione con el entorno mínimo de cron, donde PATH y las variables no son los de tu terminal.

Se usa junto con

Cómo se usa

Pasos

  1. Escribe o pega una expresión cron, o toca un ajuste rápido. El formato sigue el número de campos: 5 es crontab de Unix, 6 es Spring (con segundos), 7 o un ? es Quartz.
  2. Lee la descripción en lenguaje claro y las 10 próximas ejecuciones. Elige una zona horaria para ver cuándo se lanza allí; toca una hora para copiarla en ISO 8601.
  3. Usa el editor visual para cambiar un campo cada vez: todos los valores, un intervalo, valores concretos o un rango.
  4. Al cambiar entre Unix, Quartz y Spring la expresión se convierte cuando es posible.

Atajos

Ctrl + EnterCopiar la expresiónEnterActualizar ahora

Conviene saber

Funciona en tu navegador. Tus archivos y textos no salen de tu dispositivo.