Saltar al contenido
Toolbrik
Volver al blog

Chuleta de cron: sintaxis y 20 ejemplos listos para copiar

5 min de lecturaHerramienta relacionada: Parser de Expresiones Cron

Cron es el programador de tareas de los sistemas Unix, y su sintaxis se ha colado en todas partes: servidores Linux, Kubernetes, GitHub Actions, funciones serverless, Laravel, Spring… Aprenderla cuesta diez minutos. Olvidarla, bastante menos. Esta chuleta está pensada para tenerla a mano.

Los cinco campos

Una expresión cron clásica tiene cinco campos separados por espacios:

┌───────────── minuto (0–59)
│ ┌─────────── hora (0–23)
│ │ ┌───────── día del mes (1–31)
│ │ │ ┌─────── mes (1–12 o JAN–DEC)
│ │ │ │ ┌───── día de la semana (0–7 o SUN–SAT; 0 y 7 son domingo)
│ │ │ │ │
* * * * *  comando

Cada campo acepta estos operadores:

Símbolo Significa Ejemplo Se lee
* cualquier valor * * * * * cada minuto
, lista 0 9,14 * * * a las 9:00 y a las 14:00
- rango 0 9-17 * * * cada hora en punto, de 9 a 17 h
/ paso */15 * * * * cada 15 minutos

20 ejemplos que vas a necesitar

Expresión Cuándo se ejecuta
* * * * * Cada minuto
*/5 * * * * Cada 5 minutos
*/15 * * * * Cada 15 minutos (:00, :15, :30, :45)
0 * * * * Cada hora, en punto
30 * * * * Cada hora, a y media
0 */2 * * * Cada 2 horas
0 0 * * * Todos los días a medianoche
0 8 * * * Todos los días a las 8:00
30 23 * * * Todos los días a las 23:30
0 9 * * 1-5 De lunes a viernes a las 9:00
0 10 * * 6,0 Sábados y domingos a las 10:00
0 9-18 * * 1-5 Cada hora de 9 a 18, en días laborables
0 0 * * 0 Cada domingo a medianoche
0 0 1 * * El día 1 de cada mes
0 0 15 * * El día 15 de cada mes
0 0 1 1 * El 1 de enero (una vez al año)
0 0 1 */3 * El primer día de cada trimestre
0 3 * * 1 Los lunes a las 3:00 (típico para backups)
*/10 8-20 * * * Cada 10 minutos entre las 8:00 y las 20:59
0 12 1-7 * 1 ⚠️ No es «el primer lunes del mes» (ver abajo)

Si tienes dudas con una expresión concreta, pégala en el analizador de cron: te muestra las próximas fechas en las que se ejecutará. Y si prefieres construirla sin escribir la sintaxis, el generador de cron lo hace con selectores y te la explica en lenguaje natural.

Los atajos con @

El cron de Linux (y la mayoría de sus derivados) acepta alias legibles; GitHub Actions y otros programadores en la nube, no:

Alias Equivale a
@yearly o @annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily o @midnight 0 0 * * *
@hourly 0 * * * *
@reboot Al arrancar el sistema

Los 5 errores que más tareas rompen

1. Día del mes y día de la semana se combinan con «O», no con «Y»

Es la trampa más famosa. En el cron clásico, si restringes a la vez el día del mes y el día de la semana, la tarea se ejecuta cuando se cumple cualquiera de los dos. Así, 0 12 1-7 * 1 no significa «el primer lunes del mes a las 12», sino «los días 1 a 7 de cada mes y además todos los lunes».

La solución habitual es dejar solo uno de los dos campos y filtrar en el propio comando:

0 12 1-7 * * [ "$(date +\%u)" = 1 ] && /ruta/script.sh

(En un crontab, el % hay que escaparlo como \%: sin la barra, cron lo interpreta como un salto de línea.)

2. La zona horaria no es la que crees

Cron usa la zona horaria del sistema donde corre. En un servidor configurado en UTC, 0 9 * * * se ejecuta a las 9:00 UTC, que en España son las 10:00 en invierno y las 11:00 en verano. Los programadores gestionados suelen ir en UTC: GitHub Actions siempre usa UTC, y en Kubernetes los CronJob usan la zona del controlador salvo que indiques timeZone en la especificación.

3. El cambio de hora

Si programas algo entre las 2:00 y las 3:00 de la madrugada, el día del cambio de hora puede saltarse (en primavera esa hora no existe) o, según la implementación, ejecutarse dos veces (en otoño se repite). Para tareas críticas, evita esa franja o trabaja en UTC.

4. Los pasos no cruzan de hora

*/7 * * * * no se ejecuta «cada 7 minutos» en sentido estricto: se ejecuta en los minutos 0, 7, 14… 56, y en la hora siguiente vuelve a empezar en 0. Entre el minuto 56 y el 0 solo pasan 4 minutos. Para intervalos que no dividen 60, cron no es la herramienta adecuada.

5. Cinco campos o seis

Cron clásico tiene cinco campos y resolución de un minuto. Quartz, Spring (@Scheduled) y librerías como node-cron añaden un sexto campo al principio para los segundos: 0 */5 * * * * es «cada 5 minutos» en Spring, pero una expresión inválida en un crontab. Si copias una expresión de un sistema a otro, cuenta los campos.

Cómo comprobar una expresión antes de desplegar

El método más fiable es ver las próximas ejecuciones reales. Pega la expresión en el analizador de cron, elige 5 o 6 campos según tu sistema y revisa la lista de fechas: si ves que tu «primer lunes de mes» se ejecuta también el día 3, has caído en el error número 1. Todo se calcula en tu navegador, así que puedes probar tantas expresiones como quieras.