alltools.one
DevOps
2026-02-25
11 min
alltools.one Team
cronschedulingdevopsautomationlinux

Hoja de Referencia de Expresiones Cron — Programa Tareas como un Profesional

Cron es la columna vertebral de la automatización de tareas programadas en sistemas tipo Unix. Ya sea que estés rotando logs, ejecutando copias de seguridad de bases de datos o activando pipelines CI/CD, las expresiones cron definen cuándo se ejecutan esas tareas. La sintaxis es compacta pero potente — y fácil de equivocarse si estás adivinando.

Esta referencia cubre cada parte de la sintaxis cron con ejemplos prácticos listos para copiar y pegar. Si quieres construir y validar expresiones de forma interactiva, abre el Constructor de Expresiones Cron junto con esta guía.

Sintaxis Cron: Los Cinco Campos

Una expresión cron estándar consta de cinco campos separados por espacios:

┌───────────── minuto (0–59)
│ ┌───────────── hora (0–23)
│ │ ┌───────────── día del mes (1–31)
│ │ │ ┌───────────── mes (1–12)
│ │ │ │ ┌───────────── día de la semana (0–7, donde 0 y 7 = Domingo)
│ │ │ │ │
* * * * *

Cada campo acepta un valor específico, un rango, una lista o un comodín. Juntos, los cinco campos especifican un horario recurrente exacto.

CampoValores PermitidosCaracteres Especiales
Minuto0–59* , - /
Hora0–23* , - /
Día del Mes1–31* , - /
Mes1–12* , - /
Día de la Semana0–7* , - /

Los campos de mes y día de la semana también aceptan abreviaturas de tres letras (JANDEC, SUNSAT) en la mayoría de implementaciones.

Caracteres Especiales Explicados

Comprender cuatro caracteres especiales desbloquea todo el poder de cron:

Asterisco * — "Cada"

Coincide con todos los valores posibles para ese campo.

* * * * *    # Cada minuto de cada hora de cada día

Coma , — "Y"

Especifica una lista de valores discretos.

0 9,12,18 * * *    # A las 9:00 AM, 12:00 PM y 6:00 PM diariamente

Guión - — "Hasta"

Define un rango inclusivo.

0 9-17 * * *    # Cada hora desde las 9 AM hasta las 5 PM

Barra / — "Cada n-ésimo"

Establece un intervalo de paso desde el inicio del rango.

*/10 * * * *    # Cada 10 minutos (0, 10, 20, 30, 40, 50)

Puedes combinar un rango con un paso:

0 9-17/2 * * *    # Cada 2 horas de 9 AM a 5 PM (9, 11, 13, 15, 17)

Ejemplos Comunes de Horarios Cron

Guarda esta tabla en favoritos. Estos son los horarios que usarás una y otra vez.

HorarioExpresiónExplicación
Cada minuto* * * * *Se ejecuta al inicio de cada minuto
Cada 5 minutos*/5 * * * *Minutos 0, 5, 10, 15, …, 55
Cada 15 minutos*/15 * * * *Minutos 0, 15, 30, 45
Cada hora0 * * * *En el minuto 0 de cada hora
Cada 6 horas0 */6 * * *A las 00:00, 06:00, 12:00, 18:00
Diariamente a medianoche0 0 * * *Una vez al día a las 00:00
Diariamente a las 3 AM0 3 * * *Una vez al día a las 03:00
Cada lunes a las 9 AM0 9 * * 1Semanalmente el lunes a las 09:00
Cada día laborable a las 8 AM0 8 * * 1-5Lunes a viernes a las 08:00
Cada fin de semana al mediodía0 12 * * 0,6Sábado y domingo a las 12:00
Primero de cada mes0 0 1 * *Medianoche del 1 de cada mes
Cada trimestre (Ene, Abr, Jul, Oct)0 0 1 1,4,7,10 *Medianoche del 1 de meses trimestrales
Cada 15 min en horario laboral*/15 9-17 * * 1-5Días laborables, 9 AM–5 PM, cada 15 min

Pega cualquier expresión en el Constructor de Expresiones Cron para visualizar los próximos tiempos de ejecución.

Patrones Avanzados

Combinando Listas y Rangos

Los campos aceptan sintaxis mixta. Para ejecutar una tarea a las 8 AM y 6 PM en días laborables:

0 8,18 * * 1-5

Para apuntar a meses específicos con un paso:

0 0 1 1-12/3 *    # Cada 3 meses comenzando en enero (Ene, Abr, Jul, Oct)

Día del Mes vs. Día de la Semana

Cuando tanto el día del mes como el día de la semana están establecidos (no *), el comportamiento depende de la implementación. En cron estándar, la tarea se ejecuta si cualquiera de las condiciones se cumple — es una relación OR, no AND. Esto sorprende a muchas personas.

0 0 15 * 1    # Se ejecuta el 15 Y cada lunes — no "el lunes 15"

Ejecución al Arranque

Aunque no es una expresión cron propiamente, @reboot es un atajo ampliamente soportado:

@reboot /usr/local/bin/start-service.sh

Otros atajos comunes:

AtajoEquivalente
@yearly0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily0 0 * * *
@hourly0 * * * *

Cron en Diferentes Entornos

La sintaxis de cinco campos es universal, pero cómo configuras cron varía según la plataforma.

Crontab de Linux

El clásico. Edita tu crontab de usuario con crontab -e:

# Ejecutar copia de seguridad todos los días a las 2 AM
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Las tareas cron del sistema en /etc/cron.d/ incluyen un campo extra de usuario:

0 2 * * * root /usr/local/bin/cleanup.sh

GitHub Actions

GitHub Actions usa la misma sintaxis de cinco campos dentro de un trigger schedule. Todos los tiempos son UTC.

on:
  schedule:
    - cron: '0 3 * * 1-5'   # Días laborables a las 3 AM UTC

Para una inmersión profunda en la configuración YAML, consulta YAML para Kubernetes y YAML para Docker Compose.

Kubernetes CronJob

Kubernetes envuelve las expresiones cron en un recurso CronJob:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: report
              image: reporting:latest
              command: ["python", "generate_report.py"]
          restartPolicy: OnFailure

Kubernetes usa UTC por defecto. A partir de la v1.25, puedes establecer timeZone: "America/New_York" en la especificación del CronJob.

AWS CloudWatch (EventBridge)

AWS usa una sintaxis ligeramente diferente con seis campos (añadiendo segundos) y los envolventes rate() / cron():

cron(0 3 * * ? *)    # Diariamente a las 3 AM UTC

Nota el carácter ? — AWS lo requiere para el día del mes o el día de la semana cuando el otro está especificado. Esto es diferente del cron estándar.

Errores Comunes

1. Confusión de Zona Horaria

Cron usa la zona horaria del sistema en Linux, pero Kubernetes y GitHub Actions se ejecutan en UTC. Una tarea programada para 0 9 * * * se ejecutará a las 9 AM UTC, que es las 4 AM hora del Este o la 1 AM hora del Pacífico.

Siempre verifica qué zona horaria usa tu programador. Para conversiones de marcas de tiempo, nuestra guía de Marca de Tiempo Unix Explicada cubre los desfases UTC en detalle.

2. Ejecuciones Superpuestas

Si una tarea tarda más que el intervalo entre ejecuciones, obtendrás instancias superpuestas. Un script que se ejecuta durante 8 minutos en un horario */5 * * * * se acumulará.

Soluciones:

  • Usa un archivo de bloqueo (flock en Linux)
  • Establece concurrencyPolicy: Forbid en los CronJobs de Kubernetes
  • Verifica instancias en ejecución al inicio de tu script

3. Salida Faltante y Depuración

Cron no captura stdout por defecto. Siempre redirige la salida:

*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1

Si una tarea cron no se ejecuta, verifica:

  • grep CRON /var/log/syslog para logs de ejecución
  • Permisos de archivo del script
  • La variable de entorno PATH — cron tiene un PATH mínimo por defecto

4. La Trampa del "31 de Cada Mes"

0 0 31 * *    # Solo se ejecuta en meses con 31 días

Esto se ejecuta en enero, marzo, mayo, julio, agosto, octubre y diciembre — pero omite silenciosamente los otros cinco meses. Si necesitas una tarea de fin de mes, considera ejecutarla el 1 y ajustar la lógica de tu script, o usa una herramienta que soporte semánticas de "último día del mes".

5. Olvidar la Nueva Línea al Final del Crontab

Algunas implementaciones de cron requieren una nueva línea al final del archivo crontab. Si tu última entrada no se ejecuta, añade una línea vacía al final.

Construyendo Expresiones Visualmente

Memorizar la sintaxis funciona para patrones comunes, pero los horarios complejos son más fáciles de construir visualmente. El Constructor de Expresiones Cron en alltools.one te permite:

  • Seleccionar valores para cada campo usando desplegables
  • Ver una descripción legible del horario
  • Previsualizar los próximos tiempos de ejecución
  • Copiar la expresión final con un clic

Se ejecuta completamente en tu navegador — no se envían datos a ningún servidor.

Tarjeta de Referencia Rápida

Copia este bloque en la documentación de tu proyecto o wiki del equipo:

# ┌───── min (0-59)
# │ ┌───── hora (0-23)
# │ │ ┌───── día del mes (1-31)
# │ │ │ ┌───── mes (1-12)
# │ │ │ │ ┌───── día de la semana (0-7, Dom=0 o 7)
# │ │ │ │ │
# * * * * *

*/5 * * * *        # Cada 5 minutos
0 * * * *          # Cada hora
0 0 * * *          # Diariamente a medianoche
0 9 * * 1-5        # Días laborables a las 9 AM
0 0 1 * *          # Primero del mes
*/15 9-17 * * 1-5  # Cada 15 min, horario laboral

Lectura Adicional


¿Listo para construir tu próxima expresión cron? Abre el Constructor de Expresiones Cron y programa correctamente desde la primera vez.

Published on 2026-02-25
Cron Expression Cheat Sheet — Schedule Like a Pro | alltools.one