Utilia

Generador de expresiones cron

Crea una expresión cron campo a campo, consulta sus próximas ejecuciones en cualquier zona horaria y conviértela a formato systemd, Quartz o AWS.

Constructor

CampoModoValor
Minuto0–59
Hora0–23
Día del mes1–31, L
Mes1–12 o JAN–DEC
Día de la semana0–7 (0 y 7 = domingo) o SUN–SAT

Cómo crear una expresión cron

  1. Escribe o pega una expresión en Expresión cron, o elige una en Plantillas. También se aceptan macros como @daily o @weekly.
  2. O usa el Constructor: para cada campo elige un Modo (Todos, Cada N, Valores concretos, Rango o Personalizado) y rellena el Valor. La expresión se actualiza sobre la marcha, y al editar la expresión se actualiza el constructor.
  3. Marca Añadir un campo de segundos (6 campos) si tu planificador admite segundos.
  4. Lee el horario en En lenguaje claro y revisa la lista de Próximas ejecuciones. Elige la Zona horaria del servidor que ejecuta la tarea y Cuántas ejecuciones quieres ver.
  5. Copia la expresión con Copiar o usa uno de los Otros formatos.

La descripción en lenguaje claro del horario se muestra en español (por ejemplo, «A las 09:30, de lunes a viernes»), y las fechas de las próximas ejecuciones, en el formato de tu idioma.

Los errores se explican campo por campo, por ejemplo «Minuto: 61 está fuera de rango (0–59)», para que sepas exactamente qué corregir.

Los cinco campos de cron

Una línea de cron estándar (Vixie) tiene cinco campos y después el comando:

Campo Valores permitidos
Minuto 0–59
Hora 0–23
Día del mes 1–31
Mes 1–12 o JAN–DEC
Día de la semana 0–7 (0 y 7 son domingo) o SUN–SAT

Cada campo acepta * (todos los valores), una lista 1,15, un rango 9-17, un paso */15 (cada 15 unidades) o un rango con paso 0-30/10. Así, */15 9-17 * * 1-5 significa cada 15 minutos de 9:00 a 17:45, de lunes a viernes. Los nombres de meses y días se escriben en inglés (JAN, MON…), como exige cron.

Hay una regla que sorprende a mucha gente: cuando se restringen a la vez el Día del mes y el Día de la semana, el cron clásico se ejecuta cuando coincide cualquiera de los dos. 0 0 13 * 5 se ejecuta todos los días 13 y todos los viernes, no solo los viernes 13. La herramienta muestra un aviso en ese caso.

Próximas ejecuciones y zonas horarias

Cron usa el reloj de la máquina, o la variable CRON_TZ/TZ del crontab. La lista de Próximas ejecuciones se calcula para la zona horaria que elijas, incluidos los cambios de horario de verano: durante el cambio de primavera, una tarea programada a las 2:30 puede saltarse, y en otoño puede ejecutarse una o dos veces según la implementación. Para tareas que deben ejecutarse exactamente una vez, evita las horas entre la 1:00 y las 3:00 o usa UTC.

Vixie cron, temporizadores systemd, Quartz y AWS

  • Los temporizadores systemd usan OnCalendar= con otra sintaxis: Mon..Fri *-*-* 09..17:00/15:00. Las condiciones de día de la semana y de fecha se combinan con Y, no con O, así que algunas expresiones cron no tienen equivalente exacto.
  • Quartz y Spring ponen primero un campo de segundos y pueden añadir un campo de año. Uno de los dos campos de día debe ser ?, y Quartz numera los días de la semana del 1 al 7 empezando por el domingo, a diferencia del 0–6 de cron. La herramienta escribe los días de la semana por su nombre (MON-FRI) para evitar esa trampa.
  • AWS EventBridge usa cron(minutos horas día mes día_semana año): seis campos, sin segundos, un ? en uno de los campos de día y un año al final.

El cron estándar no tiene campo de segundos. La forma de 6 campos con segundos la admiten muchas bibliotecas (node-cron, Spring, Quartz), pero no el crontab del sistema.

Preguntas frecuentes

¿Cómo ejecuto una tarea cada 5 minutos?

Usa */5 * * * *. La tarea se ejecuta en los minutos 0, 5, 10… de cada hora.

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

Muchos planificadores aceptan L en el campo del día del mes: 0 18 L * *. Con el cron Vixie básico, ejecútala a diario los días 28 a 31 y comprueba en el script si mañana es día 1.

¿Qué hace @reboot?

Ejecuta el comando una sola vez, cuando arranca el demonio cron. No tiene horario, así que la herramienta no puede mostrar sus ejecuciones.

¿Por qué mi tarea no se ejecuta a la hora indicada?

Revisa la zona horaria del servidor, si usas el crontab del usuario o /etc/crontab (que tiene un campo de usuario adicional) y el PATH: cron arranca con un entorno mínimo.

¿El domingo es 0 o 7?

Ambos. En el campo del día de la semana, 0 y 7 significan domingo, 1 es lunes y 6 es sábado.