Calcular las próximas ejecuciones de una expresión cron
- Panel
- Documentación
- API
¿Qué es una expresión cron?
Una expresión cron es una cadena corta que describe una recurrencia en el tiempo. El
formato heredado de Unix ocupa cinco campos separados por espacios: minuto, hora,
día del mes, mes y día de la semana. Esta sintaxis nació con el demonio
cron de Brian Kernighan en los años 70 y, después, se generalizó con el Vixie cron
(1987) adoptado por todas las distribuciones Linux y macOS modernas. Hoy en día, la misma sintaxis se
encuentra en la mayoría de planificadores cloud (AWS EventBridge, GCP Cloud Scheduler, Azure Logic
Apps) y CI/CD (GitHub Actions, GitLab CI, Jenkins).
┌──── minute (0-59)
│ ┌── heure (0-23)
│ │ ┌── jour du mois (1-31)
│ │ │ ┌── mois (1-12 ou JAN-DEC)
│ │ │ │ ┌── jour de la semaine (0-7 ou SUN-SAT, 0 et 7 = dimanche)
│ │ │ │ │
* * * * *
Una expresión cron bien formada define, por tanto, un cron schedule preciso: cada campo puede ser un valor fijo, un rango, una lista, un paso o un asterisco que coincide con todo. La compacidad de la expresión crontab es su fuerza, pero también es lo que hace que un cron decoder sea indispensable para validar visualmente la intención. Ese es todo el objetivo de este cron converter: producir una explicación cron legible, más la lista de las próximas ejecuciones.
Anatomía de una expresión cron
Los cinco campos comparten una gramática común. Estos son los límites aceptados por cada columna de una expresión crontab estándar:
- Minuto:
0-59. - Hora:
0-23, formato 24 h. - Día del mes:
1-31. - Mes:
1-12o las abreviaturas textualesJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Día de la semana:
0-7, donde0y7representan ambos al domingo, o las abreviaturasSUN,MON,TUE,WED,THU,FRI,SAT.
Caracteres especiales compartidos por los cinco campos:
*: any value, coincide con todos los valores autorizados del campo.,: lista discreta, por ejemplo1,15,30en el campo minuto.-: rango inclusivo, por ejemplo9-17para las horas de oficina./: paso (step), por ejemplo*/15= cada 15 unidades, o0-30/5= cada 5 minutos entre 0 y 30.
Extensiones Quartz (Java, AWS EventBridge, Spring): la gramática sube a 6 o 7
campos con una columna segundos al inicio (0-59) y, a veces, una columna
año al final (1970-2099). Quartz también introduce ? (no specific
value, para desacoplar día-del-mes y día-de-la-semana), L (last: último día del mes,
o último viernes con 5L), W (día laborable más cercano) y #
(N-ésimo día de la semana del mes, por ejemplo 2#3 para el 3.er lunes). Una expresión
Quartz no suele ser compatible con un crontab UNIX, y viceversa: es la principal
fuente de error cuando se copia una expresión cron de una plataforma a otra.
# UNIX / Vixie cron (5 champs)
0 9 * * 1-5
# Quartz (6 champs avec secondes)
0 0 9 ? * MON-FRI
# Quartz (7 champs avec année)
0 0 9 ? * MON-FRI 2026
¿Por qué decodificar una expresión cron?
Leer 0 0 * * * es rápido. Leer */7 2-5 1,15 * 1-5 lo es claramente menos. Cuando
una expresión se sale de lo trivial, el riesgo de error de interpretación aumenta y la cron decode
se convierte en una etapa de revisión por derecho propio.
- Depuración en producción: entender por qué una tarea se disparó a las 03:17 y no a las 03:00, o identificar un solapamiento entre dos jobs.
- Code review: validar que un planificador enviado en pull request hace exactamente lo que el autor afirma, sin tener que memorizar la semántica de cada símbolo.
- Auditoría de planificadores: repasar los cron jobs de Linux en
/etc/crontaby/etc/cron.d/, los triggers de Jenkins, losspec.schedulede Kubernetes CronJob, las reglas AWS EventBridge y los jobs GCP Cloud Scheduler. - Migración legacy: retomar un
/etc/crontabhistórico sin documentación y reconstruir el mapa de tareas antes de un cambio de infraestructura. - Onboarding: permitir que un nuevo desarrollador relea una crontab sin tener que aprender de la noche a la mañana todos los caracteres especiales.
Cómo utilizar el cron decoder
El procedimiento para decodificar una expresión crontab con la herramienta:
- Pegue su expresión cron en el campo de entrada (5 campos separados por espacios).
- Indique el número de próximas ejecuciones que se deben calcular.
- Haga clic en convert para lanzar la cron decode: la herramienta devuelve una frase humana que explica el disparo, además de la lista fechada de las próximas ejecuciones.
- Compruebe visualmente que las fechas se corresponden con su intención (hora, día, frecuencia).
- Copie la salida mediante el botón de copia para pegarla en un ticket, una PR o una documentación técnica.
La herramienta no se contenta con un parsing sintáctico: proporciona una explicación cron en lenguaje natural, lo que la convierte a la vez en cron decoder y en validador de planning.
Ejemplos clásicos de expresión cron
Los patrones de a continuación cubren lo esencial de los cron schedules que aparecen en producción. Son todos válidos en Linux crontab, Kubernetes CronJob, GitHub Actions y en la mayoría de planificadores aplicativos.
| Expresión | Lectura humana |
|---|---|
* * * * * |
Cada minuto |
0 * * * * |
Cada hora en punto |
0 0 * * * |
Todos los días a medianoche |
0 0 * * 0 |
Todos los domingos a medianoche |
*/15 * * * * |
Cada 15 minutos |
0 9 * * 1-5 |
09:00 de lunes a viernes |
0 0 1 * * |
El día 1 de cada mes a medianoche |
0 0,12 * * * |
A medianoche y al mediodía todos los días |
*/5 9-17 * * 1-5 |
Cada 5 minutos en horas laborables |
30 2 1,15 * * |
El día 1 y el 15 del mes a las 2:30 |
Para ejecutar una tarea cron en un servidor Linux, se edita la crontab de usuario desde el shell:
# éditer la crontab de l'utilisateur courant
$ crontab -e
# lister les tâches existantes
$ crontab -l
# exemple de ligne ajoutée : sauvegarde quotidienne à 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Ejemplo de salida del cron converter para */5 * * * *:
2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...
Preguntas frecuentes sobre el cron decoder
¿Qué diferencia hay entre cron UNIX y Quartz?
UNIX/Vixie cron utiliza 5 campos (minuto hasta día-de-la-semana), sin precisión al segundo, y no tiene
una noción nativa de «último día del mes». Quartz (Java, Spring, AWS EventBridge) añade una columna
segundos al inicio, a veces una columna año al final, y varios símbolos
(?, L, W, #) ausentes de la crontab de Linux. Una
expresión cron de Quartz a 6 campos no es, por tanto, directamente portable a
/etc/crontab, y a la inversa. Nuestro cron decoder se centra en el formato de 5
campos, que cubre la mayoría de planificadores.
¿Cómo se ejecuta una tarea cron cada 5 minutos?
Con el paso / en el campo minuto:
*/5 * * * * /usr/local/bin/check-health.sh
Esta expresión crontab dispara el script en los minutos 0, 5, 10, 15... de cada
hora, todos los días. Para limitar a las horas laborables de lunes a viernes, añada las restricciones
sobre los campos hora y día-de-la-semana: */5 9-17 * * 1-5.
¿Qué significa el asterisco (*) en una expresión cron?
El asterisco significa any value: coincide con todos los valores autorizados del campo. En
0 0 * * *, las tres estrellas significan «cualquier día del mes, cualquier
mes, cualquier día de la semana». Combinado con los dos primeros campos fijados a 0, se
obtiene «todos los días a medianoche». La estrella también puede combinarse con un paso: */15 en
minuto = cada 15 minutos.
¿Crontab tiene una zona horaria?
Por defecto, la zona del servidor. En un crontab de Linux, es la TZ del sistema (a menudo UTC en los VPS y
los contenedores). GitHub Actions fuerza UTC. Kubernetes CronJob utiliza la zona del controlador,
configurable mediante spec.timeZone desde la 1.27. AWS EventBridge evalúa las expresiones en
UTC. Los planificadores aplicativos (Symfony Scheduler, Quartz, Airflow) suelen permitir fijar una
zona dedicada a cada tarea. En caso de duda, compruebe date en el servidor de destino y
compárelo con la salida del cron converter.
Cron job vs comando at: ¿cuál elegir?
cron sirve para ejecutar una tarea recurrente según una planificación. at sirve
para ejecutar un comando una sola vez en un instante dado. Para una copia de seguridad diaria,
una rotación de logs o una llamada de API regular, utilice cron. Para diferir una operación única
(«relanza este despliegue a las 22 h esta noche»), utilice at:
$ echo "/usr/local/bin/deploy.sh" | at 22:00
¿Cómo se prueba una expresión cron sin dispararla?
Ese es precisamente el papel de este cron converter: calcula las N próximas
ejecuciones a partir del instante actual, sin arrancar ningún job. Verá inmediatamente si su
expresión crontab se dispara a las 03:00 como estaba previsto o a las 03:17 por accidente. Para ir más
allá antes de instalar la tarea, también puede probar el script solo (bash -x script.sh)
y comprobar la sintaxis de un fichero crontab con crontab -T fichier en las distribuciones
que lo admiten.
¿Qué ocurre si día-del-mes y día-de-la-semana están fijados a la vez?
En Vixie cron (Linux), la regla es un OR lógico: el job se dispara si uno o
el otro de los dos campos coincide. Es contraintuitivo y fuente de bugs. Quartz utiliza un
AND, de ahí la introducción del símbolo ? para señalar explícitamente «sin
restricción». Por regla general, fije solamente uno de los dos campos.
Ejemplo de solicitud
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Esquema de entrada
| Campo | Tipo | Obligatorio | Por defecto |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Puntos de acceso
GET https://cdrn.fr/api/v1/tools- lista todas las herramientas disponiblesGET https://cdrn.fr/api/v1/tools/cron-converter- recupera el esquema de esta herramientaPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- ejecuta esta herramienta con un payload JSON