Traductor de cron a español: qué significa una expresión cron y cuándo se ejecuta

Pega una expresión cron, como */15 9-18 * * 1-5, o una línea entera de tu crontab, y la herramienta te explica en español cuándo se ejecuta la tarea, campo por campo, y calcula las próximas ejecuciones en la zona horaria que elijas. Avisa de los errores habituales, como un día que no existe o la trampa del día del mes y el de la semana. Todo se calcula en tu navegador.

Ejemplos:

Los cinco campos de cron

CampoValoresEjemplo
Minuto0 a 5930: en el minuto 30
Hora0 a 239-18: de 9 a 18 h
Día del mes1 a 311,15: los días 1 y 15
Mes1 a 12, o jan a dec*/3: enero, abril, julio y octubre
Día de la semana0 a 7 (0 y 7 son domingo), o sun a sat1-5: de lunes a viernes

En cada campo, * significa «todos»; a-b, un rango; a,b,c, una lista, y /n, «cada n» dentro del rango: */15 en los minutos es 0, 15, 30 y 45. Los nombres de meses y días van en inglés, con sus tres primeras letras. También existen abreviaturas: @hourly, @daily, @weekly, @monthly, @yearly y @reboot, que ejecuta la tarea al arrancar el equipo.

Las trampas más habituales

  • El día del mes y el de la semana juntos. 0 0 1 * 1 no es «el día 1 si cae en lunes», sino «el día 1 de cada mes y todos los lunes». Cuando los dos campos tienen un valor, cron ejecuta la tarea si se cumple cualquiera de los dos. Si uno de ellos lleva asterisco, como */2, cron exige que se cumplan los dos.
  • Días que no existen. 0 0 31 2 * (el 31 de febrero) nunca se ejecuta, y 0 0 31 * * se salta los meses de 30 días. Cron no tiene una forma estándar de decir «el último día del mes».
  • La zona horaria. Cron usa la hora del servidor, que muchas veces está en UTC. Un 0 9 * * * en un servidor en UTC se ejecuta a las 3:00 en la Ciudad de México. Algunas versiones admiten CRON_TZ=America/Mexico_City al principio del crontab.
  • El cambio de horario. En los países que cambian la hora, las tareas programadas en la hora que se salta o en la que se repite pueden no ejecutarse o ejecutarse dos veces, según la versión de cron. La mayor parte de México no cambia la hora desde 2022, pero sí la frontera norte.
  • Seis campos no son cron de Linux. Quartz, Spring y AWS añaden un campo de segundos o de año, y usan ?. Esta herramienta trabaja con el formato clásico de 5 campos de crontab.

Calcular las próximas ejecuciones en Python

Una versión sencilla, sin dependencias, que prueba minuto a minuto. Sigue las mismas reglas que la herramienta, también la de los dos campos de día:

from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

MESES = "jan feb mar apr may jun jul aug sep oct nov dec".split()
DIAS = "sun mon tue wed thu fri sat".split()


def campo(texto, minimo, maximo, nombres=(), base=0):
    """Los valores de un campo de cron: «*/15», «1-5», «mon,wed,fri»…"""
    def numero(t):
        return nombres.index(t) + base if t in nombres else int(t)
    valores = set()
    for trozo in texto.lower().split(","):
        rango, barra, paso = trozo.partition("/")
        if rango == "*":
            ini, fin = minimo, maximo
        else:
            a, guion, b = rango.partition("-")
            ini = numero(a)
            fin = numero(b) if guion else (maximo if barra else ini)
        valores.update(range(ini, fin + 1, int(paso or 1)))
    return valores


def proximas(expr, n=5, desde=None, zona="America/Mexico_City"):
    mi, ho, dm, me, ds = expr.split()
    minutos, horas = campo(mi, 0, 59), campo(ho, 0, 23)
    dias, meses = campo(dm, 1, 31), campo(me, 1, 12, MESES, 1)
    semana = {d % 7 for d in campo(ds, 0, 7 if "*" not in ds else 6, DIAS)}   # 7 también es domingo
    cualquiera = "*" not in dm and "*" not in ds    # con los dos días puestos, basta con uno
    tz = ZoneInfo(zona)
    t = (desde or datetime.now(tz)).astimezone(tz).replace(second=0, microsecond=0)
    resultado = []
    for _ in range(60 * 24 * 366 * 5):              # como mucho, cinco años
        t += timedelta(minutes=1)
        sem = (t.weekday() + 1) % 7                 # en cron, 0 es domingo
        dia = (t.day in dias or sem in semana) if cualquiera else (t.day in dias and sem in semana)
        if t.month in meses and dia and t.hour in horas and t.minute in minutos:
            resultado.append(t)
            if len(resultado) == n:
                break
    return resultado


desde = datetime(2026, 10, 17, 12, 0, tzinfo=ZoneInfo("America/Mexico_City"))
for t in proximas("*/15 9-18 * * 1-5", 4, desde):
    print(t.strftime("%Y-%m-%d %H:%M %Z"))
$ python3 cron.py2026-10-19 09:00 CST
2026-10-19 09:15 CST
2026-10-19 09:30 CST
2026-10-19 09:45 CST

Recorrer minuto a minuto es lento para expresiones que se ejecutan una vez al año, pero así se ve claro cómo funciona cron.

Más herramientas para desarrolladores: la calculadora de subredes, el conversor de fecha Unix, el formateador de JSON y el decodificador de JWT. Si estás empezando con la terminal, mira los comandos de Linux que de verdad se usan. Todas las herramientas, en decodigo.com/herramientas.

Formato y reglas: página de manual crontab(5) de cronie, el cron de la mayoría de las distribuciones de Linux. Las próximas ejecuciones se compararon con una búsqueda minuto a minuto independiente en 1,500 expresiones al azar y cinco zonas horarias, incluidos los cambios de horario de Nueva York y Madrid, y con la biblioteca croniter en UTC: coinciden en todas salvo en los casos en que croniter se aparta del manual.