DevToolBoxGRATIS
Blog

Generador y Analizador de Expresiones Cron: Sintaxis, Ejemplos y Codigo

17 min de lecturapor DevToolBox

Ya sea que estes automatizando mantenimiento de servidores, programando pipelines de datos o activando workflows CI/CD, la expresion cron es el lenguaje universal de la programacion de tareas. Un generador de expresiones cron te ayuda a construir estos patrones visualmente, mientras que un analizador cron traduce cadenas cripticas en descripciones legibles. Esta guia cubre desde la sintaxis cron hasta ejemplos practicos en JavaScript, Python, Bash y plataformas cloud.

Prueba nuestra herramienta gratuita de generacion y analisis de expresiones cron.

Que es una expresion cron?

Una expresion cron es una cadena compacta que define un calendario recurrente para tareas automatizadas. El nombre viene del griego chronos (tiempo) y el daemon Unix cron. Cron se ha convertido en el estandar para la programacion de tareas.

En el formato crontab clasico de Unix, una expresion cron tiene cinco campos: minuto hora dia-del-mes mes dia-de-la-semana. Cada campo acepta numeros, comodines, rangos, listas y valores de paso.

Hoy, las expresiones cron se usan en Kubernetes CronJobs, GitHub Actions, AWS EventBridge y Vercel cron. Entender la sintaxis cron es esencial para todo desarrollador.

Sintaxis de expresiones cron

La expresion cron estandar usa cinco campos. Cada campo representa una unidad de tiempo:

CampoValoresCaracteres especialesDescripcion
Minuto0-59* , - /Minuto de ejecucion
Hora0-23* , - /Hora (formato 24h)
Dia del mes1-31* , - / ? L WDia del mes
Mes1-12* , - /Mes del ano
Dia de la semana0-7* , - / ? L #Dia de la semana

Caracteres especiales: * coincide con todos los valores. La coma , separa listas. El guion - define rangos. La barra / define pasos (ej: */5 = cada 5 minutos).

El formato es: * * * * * (minuto hora dia mes dia-semana). Este patron de cinco campos es el nucleo de toda definicion de programacion cron.

Tabla de ejemplos de expresiones cron

Aqui estan los ejemplos mas comunes de expresiones cron en produccion:

Expresion cronDescripcion
* * * * *Cada minuto
*/5 * * * *Cada 5 minutos
0 * * * *Cada hora
0 0 * * *Diariamente a medianoche
0 9 * * 1-5Dias laborables a las 9 AM
0 0 1 * *Primer dia de cada mes

Ejemplos de codigo para tareas cron

JavaScript / Node.js Tareas cron

Node.js ofrece node-cron, cron, croner y Bree para la programacion de tareas:

// ===== node-cron (most popular) =====
// npm install node-cron
const cron = require('node-cron');

// Run every 5 minutes
cron.schedule('*/5 * * * *', () => {
  console.log('Running task every 5 minutes');
  // Your task logic here
});

// Run weekdays at 9:00 AM
cron.schedule('0 9 * * 1-5', () => {
  console.log('Good morning! Running weekday task.');
}, {
  timezone: 'America/New_York'
});

// Validate a cron expression
console.log(cron.validate('*/5 * * * *')); // true
console.log(cron.validate('60 * * * *'));  // false

// ===== cron npm package =====
// npm install cron
const { CronJob } = require('cron');

const job = new CronJob(
  '0 */6 * * *',   // every 6 hours
  function () {
    console.log('Running every 6 hours');
  },
  null,             // onComplete
  true,             // start immediately
  'America/Chicago' // timezone
);

// ===== croner (modern, zero-dependency) =====
// npm install croner
import { Cron } from 'croner';

// Run every minute
const task = new Cron('* * * * *', () => {
  console.log('Tick every minute');
});

// Run at specific time, get next run
const next = task.nextRun();
console.log('Next execution:', next);

// Stop the job
task.stop();

// ===== Bree (worker-thread scheduler) =====
// npm install bree
const Bree = require('bree');

const bree = new Bree({
  jobs: [
    {
      name: 'backup',
      cron: '0 2 * * *',   // daily at 2 AM
      path: './jobs/backup.js'
    },
    {
      name: 'cleanup',
      cron: '0 0 * * 0',   // weekly on Sunday
      path: './jobs/cleanup.js'
    }
  ]
});

bree.start();

Python Programacion cron

Python ofrece schedule, APScheduler, python-crontab y Celery Beat:

# ===== schedule library (human-friendly) =====
# pip install schedule
import schedule
import time

def backup_database():
    print("Backing up database...")

def send_report():
    print("Sending daily report...")

schedule.every(5).minutes.do(backup_database)
schedule.every().day.at("09:00").do(send_report)
schedule.every().monday.at("08:30").do(send_report)

while True:
    schedule.run_pending()
    time.sleep(1)

# ===== APScheduler (enterprise-grade) =====
# pip install apscheduler
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger

scheduler = BlockingScheduler()

# Using cron expression syntax
@scheduler.scheduled_job(CronTrigger.from_crontab('*/10 * * * *'))
def cleanup_temp_files():
    print("Cleaning temp files every 10 minutes")

# Using keyword arguments
@scheduler.scheduled_job('cron', hour=9, minute=0, day_of_week='mon-fri')
def weekday_report():
    print("Weekday report at 9:00 AM")

# First Monday of each month at 3 AM
@scheduler.scheduled_job('cron', day='1-7', day_of_week='mon', hour=3)
def monthly_audit():
    print("Monthly audit")

scheduler.start()

# ===== python-crontab (manage system crontab) =====
# pip install python-crontab
from crontab import CronTab

cron = CronTab(user='myuser')

# Create a new cron job
job = cron.new(
    command='/usr/bin/python3 /opt/app/backup.py >> /var/log/backup.log 2>&1'
)
job.setall('0 2 * * *')  # Daily at 2 AM
job.set_comment('Nightly database backup')
job.enable()

# List all cron jobs
for job in cron:
    print(f"{job.slices} -> {job.command}")

cron.write()  # Save changes

# ===== Celery Beat (distributed scheduling) =====
# pip install celery
# celeryconfig.py
from celery.schedules import crontab

beat_schedule = {
    'cleanup-every-hour': {
        'task': 'tasks.cleanup',
        'schedule': crontab(minute=0, hour='*/1'),
    },
    'weekly-report': {
        'task': 'tasks.send_report',
        'schedule': crontab(hour=9, minute=0, day_of_week=1),
    },
}

Bash / Linux Comandos crontab

En Linux/macOS: crontab -e para editar, crontab -l para listar:

# ===== Essential crontab commands =====

# Edit your user crontab
crontab -e

# List current cron jobs
crontab -l

# Remove all cron jobs (use with caution!)
crontab -r

# Edit another user's crontab (requires root)
sudo crontab -u www-data -e

# ===== Example crontab file =====
# Set environment variables at the top
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin
MAILTO=admin@example.com
TZ=UTC

# m h dom mon dow  command

# Backup database every night at 2 AM
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# Run cleanup every 15 minutes with flock
*/15 * * * * flock -n /tmp/cleanup.lock /opt/scripts/cleanup.sh

# Send report on weekdays at 9 AM
0 9 * * 1-5 /opt/scripts/daily-report.sh 2>&1 | logger -t daily-report

# Rotate logs on the 1st of each month
0 0 1 * * /usr/sbin/logrotate /etc/logrotate.conf

# Health check every minute (ping monitoring service)
* * * * * curl -fsS --retry 3 https://hc-ping.com/your-uuid > /dev/null

# ===== System crontab (/etc/cron.d/) =====
# /etc/cron.d/myapp (includes username field)
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin

# Note: system crontab includes a user field
*/5 * * * * www-data /opt/myapp/cron/process-queue.sh
0 3 * * * root /opt/myapp/cron/maintenance.sh

# ===== Logging best practices =====

# Log with timestamp
0 * * * * /opt/scripts/job.sh 2>&1 | while read line; do \
  echo "$(date '+\%Y-\%m-\%d \%H:\%M:\%S') $line"; \
done >> /var/log/myjob.log

# MAILTO for error notifications
MAILTO=ops-team@example.com
# Only errors are emailed (stdout goes to log, stderr to email)
0 */6 * * * /opt/scripts/etl.sh >> /var/log/etl.log

Cloud & CI/CD Programacion cron

Las expresiones cron se usan en GitHub Actions, AWS EventBridge, Kubernetes CronJob y Vercel cron:

# ===== GitHub Actions scheduled workflow =====
# .github/workflows/scheduled.yml
name: Scheduled Tasks
on:
  schedule:
    # Run every day at 6 AM UTC
    - cron: '0 6 * * *'
    # Run every Monday at 9 AM UTC
    - cron: '0 9 * * 1'
  workflow_dispatch: # Allow manual trigger

jobs:
  daily-task:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./scripts/daily-task.sh

---
# ===== AWS EventBridge (CloudWatch) cron =====
# Note: AWS cron has 6 fields (includes year)
# Format: minute hour day-of-month month day-of-week year

# Every 5 minutes
aws events put-rule \
  --name "every-5-min" \
  --schedule-expression "cron(*/5 * * * ? *)"

# Weekdays at 9 AM UTC
aws events put-rule \
  --name "weekday-morning" \
  --schedule-expression "cron(0 9 ? * MON-FRI *)"

# First day of each quarter
aws events put-rule \
  --name "quarterly" \
  --schedule-expression "cron(0 0 1 1,4,7,10 ? *)"

---
# ===== Kubernetes CronJob =====
# k8s-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: database-backup
spec:
  schedule: "0 2 * * *"           # Daily at 2 AM
  timeZone: "America/New_York"    # Available since k8s 1.27
  concurrencyPolicy: Forbid       # Prevent overlapping runs
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: myapp/backup:latest
            command: ["/bin/sh", "-c", "./backup.sh"]
            env:
            - name: DB_HOST
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: host
          restartPolicy: OnFailure

---
# ===== Vercel cron (vercel.json) =====
{
  "crons": [
    {
      "path": "/api/cron/daily-cleanup",
      "schedule": "0 0 * * *"
    },
    {
      "path": "/api/cron/hourly-sync",
      "schedule": "0 * * * *"
    },
    {
      "path": "/api/cron/weekly-report",
      "schedule": "0 9 * * 1"
    }
  ]
}

Funciones cron avanzadas

Muchas implementaciones extienden la sintaxis con un campo de segundos (6 campos) y un campo de ano (7 campos). Quartz, node-cron y Spring Framework soportan estos formatos.

Caracteres extendidos: L = ultimo, W = dia laborable mas cercano, # = N-esima ocurrencia de un dia de la semana.

Atajos no estandar: @reboot, @yearly, @monthly, @weekly, @daily, @hourly.

Depuracion y monitoreo de tareas cron

Problemas de zona horaria: siempre establece TZ=UTC en tu crontab.

Problemas de PATH: el daemon cron usa un entorno minimo. Usa rutas absolutas.

Salida no capturada: redirige siempre stdout y stderr a un archivo log.

Ejecuciones superpuestas: usa flock para prevenirlas.

Mejores practicas para tareas cron

Comentarios descriptivos: documenta cada entrada crontab.

Redireccion y logging: redirige a archivos log dedicados.

Exclusion mutua con flock: previene ejecuciones superpuestas.

Establecer SHELL y PATH: declara el entorno explicitamente.

Rutas absolutas: usa rutas absolutas en todas partes.

Servicios de monitoreo: usa healthchecks.io o Cronitor.

Conciencia de zonas horarias: usa UTC y documenta.

Preguntas frecuentes

Que significan los cinco campos de una expresion cron?

Los cinco campos son: minuto (0-59), hora (0-23), dia del mes (1-31), mes (1-12), dia de la semana (0-7). Cada campo acepta valores, comodines (*), rangos, listas y pasos.

Cual es la diferencia entre cron y los timers de systemd?

Cron es el programador Unix tradicional. Los timers de systemd son la alternativa moderna en Linux: soportan eventos, manejan ejecuciones perdidas y se integran con journalctl. Cron sigue siendo el estandar en la nube.

Como ejecuto una tarea cron cada N minutos?

Usa la sintaxis */N en el campo de minutos. Ejemplos: cada 5 minutos = "*/5 * * * *", cada 15 minutos = "*/15 * * * *". El valor debe dividir 60 para intervalos regulares.

Guias relacionadas:

Dominar las expresiones cron es esencial para todo desarrollador. Usa nuestra herramienta gratuita para generar y analizar expresiones cron.

Genera y analiza expresiones cron con nuestra herramienta gratuita.

𝕏 Twitterin LinkedIn
¿Fue útil?

Mantente actualizado

Recibe consejos de desarrollo y nuevas herramientas.

Sin spam. Cancela cuando quieras.

Prueba estas herramientas relacionadas

Cron Expression ParserCron Expression Generator⏲️Crontab Generator🔍Cron Expression Parser

Artículos relacionados

Ejemplos de expresiones Cron: cada 5 minutos, diario, semanal

Domina las expresiones cron con ejemplos prácticos.

Cron para Serverless: GitHub Actions, Vercel Cron y Cloudflare Workers

Domina las expresiones cron en plataformas serverless. Sintaxis, errores de zona horaria y ejemplos.

Hoja de referencia Docker Compose: Servicios, volúmenes y redes

Referencia Docker Compose: definiciones de servicios, volúmenes, redes, variables de entorno y ejemplos de stacks.