ToolActToolAct

Generador de Expresiones Cron

Generador y analizador visual para expresiones de programación Cron

Cron 表达式
* * * ? * *
每秒钟执行
常用
字段设置
秒 (0-59)
分 (0-59)
时 (0-23)
日 (1-31)
月 (1-12)
周 (0-6)
最近 5 次执行时间
12026-07-04 00:00:00
22026-07-04 00:01:00
32026-07-04 00:02:00
42026-07-04 00:03:00
52026-07-04 00:04:00

¿Qué es una Expresión Cron?

Una expresión Cron describe horarios recurrentes para tareas programadas. Según el planificador, puede tener cinco, seis o siete campos para minuto, hora, día del mes, mes, día de la semana, segundos opcionales y año opcional. Símbolos como asteriscos, comas, rangos, pasos, signos de interrogación y marcadores especiales permiten reglas como “cada 5 minutos”, “días laborables a las 9” o “el último día del mes”. La herramienta ayuda a leer, validar y previsualizar próximas ejecuciones para no depender de memoria. El contexto importa: cron de Linux, Quartz, planificadores cloud y frameworks difieren en campos, zona horaria y sintaxis.

Cómo usar

Cómo usar

  1. Selecciona el modo Generar o Analizar
  2. Configura los campos de tiempo (segundo, minuto, hora, día, mes, día de la semana) mediante menús desplegables
  3. Haz clic en los preajustes para rellenar rápidamente expresiones comunes
  4. El modo Generar muestra la expresión y las próximas 5 ejecuciones
  5. El modo Analizar valida expresiones existentes y muestra las horas de ejecución

Símbolos de sintaxis

  • * — Todos los valores posibles
  • , — Lista varios valores (ej. 1,3,5)
  • - — Rango (ej. 1-5)
  • / — Intervalo de paso (ej. */5 significa cada 5)
  • ? — Sin valor específico (para día o día de la semana)
  • L — Último día del mes o la semana
  • W — Día laborable más cercano
  • # — N-ésimo día de la semana (ej. 2#3 = 3.er martes)

Notas de desarrollo

  • Usa el resultado como referencia rápida y luego pruébalo en el código real, la compilación o el contexto de la API.
  • Ten en cuenta versiones, dialectos, variables de entorno y convenciones del proyecto.

Notas importantes

  • Los campos de día y día de la semana no pueden tener ambos valores; uno debe usar ?
  • Cada campo tiene rangos válidos: minuto 0-59, hora 0-23
  • El orden de los campos es fijo: seg min hora día mes día_semana año
  • El día de la semana no distingue mayúsculas y minúsculas; MON y mon son equivalentes

Casos de uso

Construir expresiones de programación estilo Quartz sin memorizar cada campoUsa los controles visuales de campos para ensamblar una expresión de 6 campos con segundos, minutos, horas, día, mes y día de la semana, incluyendo rangos, pasos, último día, día laborable y patrones de n-ésimo día de la semana. El constructor de expresiones es puramente del lado del cliente, así que un borrador de programación puede comprobarse contra un archivo de configuración del proyecto o un JSON de tareas programadas antes de confirmarlo y subirlo.
Analizar una expresión cron existente antes de desplegarlaPega una expresión de 5 o 6 campos para rellenar los controles y detectar si la programación usa segundos, día del mes, día de la semana o ? de la forma esperada. El resultado analizado muestra una descripción en lenguaje natural y las próximas ejecuciones, que es la forma más rápida de detectar una programación que se dispara a medianoche cuando la tarea debería ejecutarse en horario laboral.
Revisar las próximas ejecuciones para verificar la coherenciaComprueba la descripción generada y las próximas cinco ejecuciones antes de usar la expresión para tareas, informes, copias de seguridad, recordatorios o tareas de servidor que son difíciles de reprogramar después del despliegue. Esto detecta errores de un día en la elección del día de la semana y comportamientos inesperados del campo de segundos a tiempo. Una programación fijada en 0 0 0 29 2 ? para el 29 de febrero omitirá silenciosamente cada año no bisiesto, así que la vista previa analizada hace visible ese hueco antes de conectar la tarea a un flujo de nómina o cierre por lotes.
Tener en cuenta la diferencia entre la sintaxis de Linux cron y QuartzUna expresión de 5 campos funciona en cron de Linux y demonios Unix; una expresión de 6 campos con segundos funciona en Quartz, Spring y la mayoría de planificadores en la nube. Confirma el sistema objetivo antes de guardar, porque los mismos dígitos significan programaciones diferentes. Quartz también acepta abreviaturas como @hourly, @daily, @midnight, @weekly, @monthly, @yearly y @reboot, que se colapsan en expresiones fijas de cinco o seis campos y son útiles en la anotación @Scheduled de Spring pero rechazadas por crond clásico.
Verificar el manejo de zonas horarias antes del despliegue de tareasComprueba si el planificador interpreta la expresión cron en hora del servidor, UTC o una zona con nombre como America/New_York, ya que una tarea escrita en la hora de la sede puede ejecutarse con varias horas de retraso en un worker desplegado globalmente.

Principio técnico

Una expresión cron codifica cero o más restricciones de coincidencia temporal en campos con un orden fijo. El cron clásico Vixie/BSD (usado por Linux crond) utiliza 5 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-6 o SUN-SAT, siendo 0 domingo por convención). El planificador Quartz, popularizado por Spring y la biblioteca Egistix, añade un campo de segundos al inicio para 6 campos y un campo de año opcional al final para 7. Cada campo puede contener un valor literal, una lista (1,3,5), un rango (1-5), un paso (0/15 que significa cada 15 empezando en 0) o el comodín * que coincide con todos los valores. El signo de interrogación ? es un centinela exclusivo de Quartz que significa "sin valor específico" y DEBE aparecer exactamente en una de las posiciones día del mes o día de la semana cuando la otra tiene una restricción. El cálculo de las próximas N ejecuciones utiliza un algoritmo voraz de búsqueda hacia adelante: se parte del instante de referencia (normalmente ahora), se incrementa el campo de nivel más bajo que no coincide con la restricción, se reinician todos los campos inferiores a su mínimo y se produce un cascada hacia campos superiores cuando un campo se desborda (por ejemplo, minutos al pasar de 59, horas al pasar de 23). Este es el método iterativo de Donovan/Spoonhour y funciona en O(K x F), donde K es el número de candidatos (normalmente 5) y F es el número de campos. Los nombres de días (MON, FRI, etc.) se convierten a minúsculas para la comparación y las abreviaturas de meses también se aceptan. El carácter especial L en Quartz se resuelve a la última aparición de un día de la semana en el mes (por ejemplo, 0 0 0 ? * 5L es el último viernes), calculando hacia atrás desde el último día del mes para encontrar el día solicitado. El carácter W encuentra el día laborable más cercano (lunes-viernes) a un día del mes dado, saltando al mes adyacente si es necesario. El manejo de zonas horarias es la configuración errónea más común: la expresión en sí no contiene metadatos de zona horaria, por lo que la misma 0 0 9 * * ? se activa en diferentes desplazamientos UTC en servidores de America/New_York frente a Asia/Tokyo frente a UTC. Las abreviaturas como @daily (0 0 0 * * ?), @hourly (0 0 * * * ?), @reboot (se ejecuta una vez al iniciar el demonio, no es una expresión temporal) y @weekly (0 0 0 ? * 1) se expanden a su forma equivalente de 6 campos antes del análisis. Un error frecuente es la conjunción día del mes + día de la semana: en cron clásico la tarea se ejecuta cuando cualquiera de los dos coincide (lógica OR), mientras que algunos dialectos más recientes cambian a lógica AND. La expresión 0 0 0 15 * 5 significa "a medianoche del día 15 Y cada viernes" en Vixie cron, no "a medianoche del día 15 O el viernes" como muchos principiantes asumen. El problema Y2038 no afecta directamente a cron (usa time_t), pero cualquier dispositivo embebido que ejecute un crond Unix de 32 bits desbordará el entero con signo de 32 bits de time_t el 19 de enero de 2038 a las 03:14:07 UTC.

  • Clásico de 5 campos: min hora dom mes ds; Quartz añade seg (6 campos) y opcionalmente año (7 campos).
  • ? debe ocupar una de las posiciones dom/ds cuando la otra tiene un valor; * coincide con todos los valores de ese campo.
  • Día del mes + día de la semana es OR en Vixie cron, AND en algunos planificadores más recientes: verifica antes de desplegar.
  • L se resuelve al último día de la semana del mes: por ejemplo, 0 0 0 ? * 5L = último viernes, calculado a partir de la longitud del mes.
  • W encuentra el día laborable más cercano (lunes-viernes) a una fecha dada; puede cruzar al mes adyacente.
  • La expresión cron no contiene metadatos de zona horaria: la misma expresión se activa en hora local del servidor, UTC o una zona con nombre según el planificador.
  • Y2038: time_t de 32 bits se desborda el 19 de enero de 2038 a las 03:14:07 UTC; los crond en sistemas embebidos heredados se verán afectados.
  • Las abreviaturas @hourly/@daily/@midnight/@weekly/@monthly/@yearly/@reboot se expanden a expresiones equivalentes de 5 o 6 campos.
  • El operador paso / cuenta desde el valor más a la izquierda: 2/3 en hora se activa a las 2, 5, 8, 11, 14, 17, 20, 23.
  • Búsqueda voraz hacia adelante en O(KxF) con cinco iteraciones para calcular las próximas N ejecuciones desde un instante de referencia.

Ejemplos

Cada día a medianoche (copia de seguridad diaria)

Expresión   : 0 0 * * *
Significa   : A las 00:00 todos los días
Próximas    : 2026-06-11 00:00, 2026-06-12 00:00, 2026-06-13 00:00
Caso de uso : Copia de base de datos, generación de informe diario

Cada 15 minutos (verificación de salud)

Expresión   : */15 * * * *
Significa   : En los minutos 0, 15, 30, 45 de cada hora
Próximas    : 14:00, 14:15, 14:30, 14:45, 15:00
Caso de uso : Verificación de salud de API, sondeo de cola, tareas de sincronización

Días laborables a las 9:00 AM (notificador en horario laboral)

Expresión   : 0 9 * * 1-5
Significa   : 09:00 de lunes a viernes
Próximas    : Lun 09:00, Mar 09:00, Mié 09:00, Jue 09:00, Vie 09:00
Caso de uso : Recordatorio de stand-up, resumen diario en Slack

El primer día de cada mes a las 03:30 (facturación mensual)

Expresión   : 30 3 1 * *
Significa   : 03:30 el día 1 de cada mes
Próximas    : Jul 1 03:30, Ago 1 03:30, Sep 1 03:30
Caso de uso : Emisión mensual de facturas, rotación de logs, archivado

Cada domingo a medianoche (limpieza semanal)

Expresión   : 0 0 * * 0
Significa   : 00:00 cada domingo (0 = Domingo en cron de Linux)
Próximas    : Dom 00:00, Dom 00:00, Dom 00:00
Caso de uso : Correo de informe semanal, purga de caché, reentrenamiento

Quartz con segundos - cada 30 segundos

Expresión   : */30 * * * * ?
Significa   : Cada 30 segundos (sintaxis Quartz de 6 campos)
Próximas    : 14:00:00, 14:00:30, 14:01:00, 14:01:30
Nota        : Día de la semana es ?, porque día del mes es *. Usa Quartz, no cron de Linux, para este formato.

Preguntas frecuentes

¿Qué formatos de cron son compatibles?

Cron estándar de 5 campos (minuto hora díaDelMes mes díaDeLaSemana), de 6 campos con segundos (usado por Quartz, Spring y muchos planificadores en la nube) y de 7 campos con año opcional. La página te permite elegir el formato y explica cada campo mientras construyes la expresión.

¿Por qué dayOfMonth y dayOfWeek son ambos campos?

El cron estándar los trata como OR: «el primer día del mes O todos los lunes» dispara con cualquiera de las dos condiciones. Para combinarlos con AND, normalmente necesitas la sintaxis no estándar con ? (Quartz) o algún truco. La página muestra los próximos disparos para que verifiques visualmente tu intención.

¿La planificación se ejecutará realmente en mi sistema?

No: esta página genera y valida la expresión, pero la tarea la ejecuta tu planificador (cron de Linux, GitHub Actions, Kubernetes CronJob, AWS EventBridge, Quartz, etc.). Distintos planificadores tienen dialectos de cron ligeramente diferentes; elige el formato adecuado para tu destino.

¿Qué zona horaria usa la planificación?

El cron estándar de Unix usa la zona horaria local del sistema. Los planificadores en la nube varían: AWS EventBridge usa UTC por defecto, GitHub Actions usa UTC por defecto y Kubernetes CronJob usa la zona horaria del API server. Lee la documentación de tu planificador y recuerda que los cambios de horario de verano pueden disparar tareas en momentos inesperados.

¿Cómo expreso «cada 30 minutos»?

*/30 * * * * (minuto = 0,30; cada hora, día, mes y día de la semana). Para «cada 15 minutos solo en horario laboral»: */15 9-17 * * 1-5 (también se restringe a las 9-17:00 de lunes a viernes). La página muestra los próximos 5-10 disparos para confirmarlo.

¿Es seguro usar esto para planificaciones de producción reales?

La página solo genera la expresión; ejecutar la tarea es trabajo de tu planificador. Prueba la expresión primero con una ejecución de muestra (la mayoría de planificadores tienen una opción de «ejecución manual») y evita programar tareas a medianoche (00:00), donde muchas tareas del sistema coinciden y provocan picos.

¿Se sube algo a un servidor?

No. La expresión se analiza y los próximos disparos se calculan en tu navegador con una librería JavaScript de cron.