Saltar al contenido

Generador de expresiones cron:
¿cuándo se ejecutará?

Elige una frecuencia y una hora. El constructor escribe la expresión de cinco campos, la traduce a una frase clara y enumera las próximas diez fechas en que se ejecutará — así compruebas la programación antes de que llegue al crontab, no después de la ejecución de las 03:30.

Sintaxis de cron

Cómo leer 30 3 * * 1-5

Toda expresión cron responde a las mismas cinco preguntas, de izquierda a derecha — aquí, sobre una programación real.

30 minuto 0 – 59 a la media
3 hora 0 – 23 3 de la madrugada, hora del servidor
* día del mes 1 – 31 cualquier fecha
* mes 1 – 12 cualquier mes
1-5 día de la semana 0 – 7 · 0 y 7 = dom lunes – viernes

Léelo como una frase: de lunes a viernes, a las 03:30. 30 3 * * 1-5

De la frase al crontab

Mira la programación antes de que cron la ejecute

La mayoría de las expresiones cron se prueban por primera vez con la ejecución de las 03:30 en producción. Este generador traslada esa prueba a tu navegador:

  • Preguntas estructuradas, no suposiciones. Frecuencia, día, hora — cada ambigüedad de la frase en lenguaje natural se convierte en un control explícito.
  • Las próximas diez ejecuciones, calculadas. Un analizador real recorre el calendario para que leas la programación como fechas, no como sintaxis.
  • Salida POSIX portable. Cinco campos, solo números — funciona en cualquier crontab, de Alpine a AIX. Los símbolos exóticos quedan señalados, no generados.

Una expresión cron, campo a campo

*/15 9-17 * * 1-5
*/15minuto — cada 15: :00, :15, :30, :454× / hora
9-17hora — un rango: de 09:00 a 17:459 horas
*día del mes — sin restriccióncualquiera
*mes — sin restriccióncualquiera
1-5día de la semana — de lunes a viernesdías laborables
La frase completa: cada 15 minutos, de 09:00 a 17:45, de lunes a viernes. ¿Necesitas la dirección contraria para una expresión que no has escrito tú? Para eso está nuestro traductor cron.
Símbolos de cron

Qué significan *, */5 y @daily

Cinco funcionan en cualquier crontab. El sexto es exclusivo de Quartz y no se instalará.

*

Coincide con todo — el valor por defecto, y el más ruidoso. En el campo de los minutos significa sesenta ejecuciones por hora, que es de donde sale el típico ticket de «¿por qué esto se ha ejecutado 60 veces?».

→ si quieres que sea una sola vez, escribe un número
*/5

Un paso — cada 5.º valor. Los pasos no se propagan entre campos: */90 en el campo de los minutos se convierte, sin avisar, en «a :00» — una cadencia de 90 minutos necesita dos líneas.

→ los pasos viven dentro de un único campo
1-5

Un rango — de lunes a viernes en el campo del día de la semana, 9–17 en el campo de la hora. Se puede combinar con una lista: 1-5,0 son los días laborables más el domingo.

→ los rangos y las listas se combinan sin problema
0,30

Una lista — valores exactos, separados por comas. La forma portable de decir «dos veces por hora» o «enero, abril, julio, octubre».

→ enumera los valores exactos que quieras
@daily

Apodos — @hourly @daily @weekly @reboot. Cómodos donde están soportados, pero @reboot se dispara cuando arranca el daemon de cron, que no siempre coincide con un reinicio de la máquina.

→ los cinco campos numéricos funcionan en cualquier cron
MON#1

Esto no es cron. # L W ? pertenecen a Quartz — Jenkins, Spring, algunas herramientas de CI. Pégalos en un crontab y la línea no se instalará.

→ crontab es solo POSIX de 5 campos
Recetas para copiar y pegar

Programaciones cron ya hechas

Todas son POSIX válido. Para los casos menos habituales, como «cada 2 de marzo a las 5:30 de la tarde», consulta nuestra biblioteca de ejemplos de cron.

Cada minuto* * * * *
Cada 5 minutos*/5 * * * *
Cada hora, en punto0 * * * *
Cada 2 horas0 */2 * * *
Cada noche a las 03:3030 3 * * *
Laborables a las 09:000 9 * * 1-5
Domingos a las 02:000 2 * * 0
Día 1 del mes, 06:000 6 1 * *
Trimestral (1 de enero, abril, julio y octubre)0 6 1 1,4,7,10 *
Preguntas frecuentes

Preguntas frecuentes sobre expresiones cron

Convierte una programación que puedes describir en palabras, como «cada día laborable a las nueve», en la expresión de cinco campos que lee el cron: 0 9 * * 1-5. Esta herramienta va más allá: traduce la expresión a una frase y calcula sus próximas diez ejecuciones, para que compruebes la programación como fechas. También señala las dos trampas clásicas: la regla OR del campo de día y el error de poner un asterisco donde iba un cero.

De izquierda a derecha: minuto (0–59), hora (0–23), día del mes (1–31), mes (1–12) y día de la semana (0–7, donde 0 y 7 significan ambos domingo). Cada campo admite un número, una lista (0,30), un rango (1-5), un paso (*/15) o * para «cualquiera». Algunos planificadores añaden un sexto campo para los segundos (Quartz, Spring) — un crontab no lo acepta.

No en una sola línea — los pasos no arrastran el resto entre campos, así que */90 en el campo de los minutos solo significa «a :00». La solución son dos líneas de crontab que se intercalan: 0 0-21/3 * * * (00:00, 03:00, 06:00…) más 30 1-22/3 * * * (01:30, 04:30, 07:30…) — juntas, cada 90 minutos. El mismo truco sirve para cualquier cadencia que no divida a 60.

Porque el campo de los minutos era *. * 3 * * * significa «cada minuto en que la hora sea 3» — de 03:00 a 03:59, sesenta ejecuciones. Lo que querías escribir era 0 3 * * *. Es el error clásico de cron, y la razón por la que esta herramienta siempre escribe un minuto explícito salvo que elijas literalmente «cada minuto».

Cron se dispara cuando cualquiera de los dos coincide — es una unión, no una intersección. Está en la especificación POSIX, y sorprende a mucha gente. Toma 0 9 1-7 * 1, un intento natural de decir «el primer lunes del mes». Se ejecuta los días 1–7 y todos los lunes: 10 u 11 mañanas al mes en lugar de una. La vista de la trampa en esta página calcula las dos lecturas en paralelo y muestra el arreglo portable.

La hora local del servidor — cron no tiene ningún campo de zona horaria. Si la máquina va en UTC (como la mayoría de las imágenes cloud), las 09:00 del crontab son las 09:00 UTC. Algunas variantes de cron (cronie en RHEL/Fedora, FreeBSD) respetan una línea CRON_TZ=; el vixie-cron clásico de Debian no. Y vigila el horario de verano si el servidor va en una zona local: en las noches de cambio, las 02:30 pueden ocurrir dos veces — o ninguna. Programar fuera de la franja 01:00–03:00, o mantener los servidores en UTC, evita el problema por completo.

Cron registra que ha iniciado la tarea; nada de serie te dice que ha ido bien. Tres capas: redirige la salida a un log (>> /var/log/job.log 2>&1), configura MAILTO= con una dirección que alguien lea de verdad y añade luego una comprobación independiente sobre el resultado. La tercera capa funciona siempre que el resultado sea visible desde fuera: una página regenerada, un certificado renovado, un sitemap. La vista de fallos silenciosos de esta página recorre todo el modo de fallo.

Herramientas gratis, solo el principio.
Uptimia cuida tus sitios.

Disponibilidad, SSL, caducidad de dominio, velocidad de carga, transacciones — monitorizados desde 171+ ubicaciones en todo el mundo. 30 días gratis.

30 días gratis sin tarjeta cancela cuando quieras plan gratuito tras la prueba
100.000+ sitios monitorizados · conforme al RGPD