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.
- `0 0 13 * 5` se lee como "medianoche del viernes 13"
- ambos campos de día están restringidos, así que cron los une con O
- en realidad se ejecuta el 13 de cada mes Y todos los viernes: unas 64 veces al año, no una o dos
- `0 0 */7 * *` se lee como "cada siete días"
- 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.