Skip to main content

Crea una expresión cron a partir de opciones sencillas, sin memorizar la sintaxis.

Expresión cron

0 2 * * *

Diario — 02:00

Entender los cinco campos

Una expresión cron tiene cinco campos en orden fijo: minuto, hora, día del mes, mes y día de la semana. El asterisco significa «todos los valores», un número fija un valor exacto y */N significa «cada N». Así, 30 2 * * 1 se ejecuta a las 02:30 todos los lunes.

Dos detalles suelen despistar. En el día de la semana, domingo es 0 (y 7 en la mayoría de implementaciones), así que lunes es 1. Y si defines a la vez día del mes y día de la semana, la mayoría de los demonios cron ejecutan la tarea cuando coincide cualquiera de los dos, no ambos: deja uno como asterisco salvo que quieras ese comportamiento.

Por qué `0 0 13 * 5` no significa viernes 13

Una expresión cron son cinco campos que describen cuándo se ejecuta un comando. Casi todo resulta obvio una vez visto. Dos cosas no lo son: cómo se combinan los campos de día y sobre qué avanza realmente un valor de paso. Ambas producen en silencio planificaciones que se disparan mucho más a menudo de lo previsto.

Cómo funciona

  • Construye la expresión de cinco campos —minuto, hora, día del mes, mes, día de la semana— a partir de elecciones sencillas.
  • Muestra las próximas ejecuciones, la única forma fiable de confirmar que una expresión significa lo que crees.
  • Hace visible la interacción entre día del mes y día de la semana en lugar de dejar que se descubra en producción.
┌─ minuto        0–59
│ ┌─ hora        0–23
│ │ ┌─ día del mes 1–31
│ │ │ ┌─ mes       1–12
│ │ │ │ ┌─ día de la semana 0–6 (domingo = 0)
* * * * *

si día del mes Y día de la semana están ambos restringidos, cron se ejecuta con CUALQUIERA

Ejemplo resuelto

Dos expresiones que casi todo el mundo lee mal la primera vez.

  1. `0 0 13 * 5` se lee como "medianoche del viernes 13"
  2. ambos campos de día están restringidos, así que cron los une con O
  3. en realidad se ejecuta el 13 de cada mes Y todos los viernes: unas 64 veces al año, no una o dos
  4. `0 0 */7 * *` se lee como "cada siete días"
  5. el paso se aplica dentro del rango 1–31, dando los días 1, 8, 15, 22 y 29

La segunda expresión se reinicia cada mes, así que el hueco del 29 al 1 siguiente es de tres días en un mes de 31, no de siete. Ninguna de las dos es semanal. `0 0 * * 5` es como se dice todos los viernes.

Cómo leer el resultado

  • La regla del O solo se aplica cuando ambos campos de día están restringidos. Si alguno es `*`, el otro se comporta con normalidad, y por eso la trampa permanece oculta hasta que alguien rellena los dos.
  • Los pasos cuentan siempre desde el inicio del rango, no desde hoy. `*/7` en un campo que empieza en 1 cae en 1, 8, 15, 22, 29 sin importar el día del despliegue.
  • Cron usa la zona horaria del sistema o del demonio. Una tarea a las 02:30 puede ejecutarse dos veces o ninguna los días de cambio de hora; planificar fuera de 01:00–03:00 evita la cuestión por completo.
  • `0` y `7` significan domingo en el campo de día de la semana en casi todas las implementaciones, y nombres como `MON` o `JAN` se admiten ampliamente pero no universalmente.

Preguntas frecuentes

¿Cómo planifico de verdad algo cada siete días?
Usa un día de la semana: `0 0 * * 5` para todos los viernes. Si realmente necesitas un intervalo fijo de siete días independiente del calendario, cron es la herramienta equivocada: una tarea que se replanifica a sí misma, o un temporizador con intervalo monótono, lo expresa correctamente.
¿Qué se ejecuta el 31 en un mes corto?
Nada. Cron no pasa al día 1, así que `0 0 31 * *` se salta en silencio febrero, abril, junio, septiembre y noviembre. Para trabajo de fin de mes, planifica el día 1 y mira hacia atrás.