DevToolBoxGRATIS
Blog

Crontab Cheat Sheet 2025: 50+ Ejemplos de Expresiones Cron que Realmente Usarás

12 min de lecturapor DevToolBox

Ya sea que programes respaldos, automatices despliegues o ejecutes scripts de limpieza, cron es la base de la programación de tareas en Unix/Linux. Esta hoja de referencia te da 50+ ejemplos de expresiones cron listos para copiar y pegar.

1. Sintaxis de Expresiones Cron

Una expresión cron estándar tiene 5 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)
│ │ │ │ │
* * * * *  command_to_execute

El comando sigue a los cinco campos. Usa nuestro Generador Cron para construir expresiones visualmente.

Cron Generator Tool →

2. Caracteres Especiales

Cron usa cuatro caracteres especiales:

CarácterSignificadoEjemploDescripción
*Coincide con cada valor posible* * * * *Every minute
,Especifica una lista de valores0 9 * * 1,3,5Mon, Wed, Fri at 9 AM
-Define un rango inclusivo0 9 * * 1-5Mon through Fri at 9 AM
/Define un intervalo de paso*/10 * * * *Every 10 minutes

3. 50+ Ejemplos de Expresiones Cron

Las tablas cubren las programaciones cron más comunes.

Cada X minutos

ExpresiónDescripciónPróxima ejecución
* * * * *Every minute10:00, 10:01, 10:02 ...
*/1 * * * *Every minute (explicit)10:00, 10:01, 10:02 ...
*/2 * * * *Every 2 minutes10:00, 10:02, 10:04 ...
*/5 * * * *Every 5 minutes10:00, 10:05, 10:10 ...
*/10 * * * *Every 10 minutes10:00, 10:10, 10:20 ...
*/15 * * * *Every 15 minutes10:00, 10:15, 10:30, 10:45
*/20 * * * *Every 20 minutes10:00, 10:20, 10:40 ...
*/30 * * * *Every 30 minutes10:00, 10:30, 11:00 ...
0,15,30,45 * * * *At 0, 15, 30, 45 minutes past each hour10:00, 10:15, 10:30, 10:45

Cada hora

ExpresiónDescripciónPróxima ejecución
0 * * * *Every hour (at minute 0)10:00, 11:00, 12:00 ...
30 * * * *Every hour at minute 3010:30, 11:30, 12:30 ...
15 * * * *Every hour at minute 1510:15, 11:15, 12:15 ...
0 */2 * * *Every 2 hours00:00, 02:00, 04:00 ...
0 */3 * * *Every 3 hours00:00, 03:00, 06:00 ...
0 */4 * * *Every 4 hours00:00, 04:00, 08:00 ...
0 */6 * * *Every 6 hours00:00, 06:00, 12:00, 18:00
0 */8 * * *Every 8 hours00:00, 08:00, 16:00
0 */12 * * *Every 12 hours00:00, 12:00

Diarios

ExpresiónDescripciónPróxima ejecución
0 0 * * *Daily at midnight (00:00)Tomorrow 00:00
0 1 * * *Daily at 1:00 AMTomorrow 01:00
0 6 * * *Daily at 6:00 AMTomorrow 06:00
30 7 * * *Daily at 7:30 AMTomorrow 07:30
0 9 * * *Daily at 9:00 AMTomorrow 09:00
30 8 * * *Daily at 8:30 AMTomorrow 08:30
0 12 * * *Daily at noon (12:00)Tomorrow 12:00
0 15 * * *Daily at 3:00 PMTomorrow 15:00
0 18 * * *Daily at 6:00 PMTomorrow 18:00
0 23 * * *Daily at 11:00 PMTomorrow 23:00
0 8-17 * * *Every hour from 8 AM to 5 PM08:00, 09:00 ... 17:00
0 9,12,18 * * *Three times a day (9 AM, noon, 6 PM)09:00, 12:00, 18:00

Semanales

ExpresiónDescripciónPróxima ejecución
0 9 * * 1Every Monday at 9:00 AMNext Monday 09:00
0 9 * * 1-5Weekdays (Mon-Fri) at 9:00 AMNext weekday 09:00
0 0 * * 0Every Sunday at midnightNext Sunday 00:00
0 0 * * 6,0Saturday & Sunday at midnightNext Sat/Sun 00:00
0 17 * * 5Every Friday at 5:00 PMNext Friday 17:00
0 9 * * 1,3,5Mon, Wed, Fri at 9:00 AMNext Mon/Wed/Fri 09:00
0 8-17 * * 1-5Hourly 8AM–5PM, weekdays onlyNext weekday 08:00
30 6 * * 1-5Weekdays at 6:30 AMNext weekday 06:30

Mensuales

ExpresiónDescripciónPróxima ejecución
0 0 1 * *1st of every month at midnightNext month, 1st 00:00
0 0 15 * *15th of every month at midnightNext 15th 00:00
0 9 1 * *1st of every month at 9:00 AMNext month, 1st 09:00
0 0 1,15 * *1st and 15th at midnightNext 1st or 15th 00:00
0 0 * * 5LLast Friday of the month (non-std)Last Fri 00:00
0 9 * * 1#1First Monday of the month (non-std)First Mon 09:00
0 0 28 * *28th of every month at midnightNext 28th 00:00

Anuales / Trimestrales

ExpresiónDescripciónPróxima ejecución
0 0 1 1 *January 1st at midnightJan 1 00:00
0 0 1 1,4,7,10 *Quarterly: Jan, Apr, Jul, Oct 1stNext quarter 00:00
0 0 1 1,7 *Bi-annually: Jan 1 & Jul 1Jan 1 or Jul 1 00:00
0 0 25 12 *December 25th at midnightDec 25 00:00
0 0 1 */3 *Every 3 months on the 1stNext 1st in 3 months
0 0 1 */6 *Every 6 months on the 1stNext 1st in 6 months

Business & DevOps

ExpresiónDescripciónPróxima ejecución
0 2 * * *Database backup at 2:00 AM dailyTomorrow 02:00
0 3 * * 0Log rotation every Sunday at 3 AMNext Sunday 03:00
0 4 1 * *Monthly DB cleanup on 1st at 4 AMNext month, 1st 04:00
0 1 * * *SSL cert check daily at 1 AMTomorrow 01:00
*/5 * * * *Health check every 5 minutes10:00, 10:05, 10:10 ...
0 5 * * 1-5Deploy window: weekdays at 5 AMNext weekday 05:00
0 0 * * *Rotate logs daily at midnightTomorrow 00:00
0 */4 * * *Send report digest every 4 hours00:00, 04:00, 08:00 ...
0 22 * * 5Friday night maintenance at 10 PMNext Friday 22:00
30 2 * * *Temp file cleanup at 2:30 AM dailyTomorrow 02:30
Cron Expression Parser Tool →

4. Comandos Crontab

El comando crontab gestiona archivos cron por usuario:

ComandoAcción
crontab -eEdit your crontab file (opens in default editor)
crontab -lList all cron jobs for the current user
crontab -rRemove all cron jobs for the current user (use with caution!)
crontab -u alice -lList cron jobs for a specific user (requires root)
crontab -u alice -eEdit crontab for a specific user (requires root)
crontab filenameInstall a crontab from a file (overwrites existing)
# Edit crontab
crontab -e

# List all cron jobs
crontab -l

# Backup current crontab to a file
crontab -l > my-crontab-backup.txt

# Install crontab from a file
crontab my-crontab-backup.txt

# Remove all cron jobs (careful!)
crontab -r
Crontab Generator Tool →

5. Sintaxis por Plataforma

La sintaxis cron varía según la plataforma:

Linux crontab

5 campos estándar.

# Standard 5-field crontab
*/5 * * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
GitHub Actions

5 campos en schedule.cron. Siempre UTC.

# .github/workflows/scheduled.yml
on:
  schedule:
    - cron: '0 9 * * 1-5'  # Weekdays 9AM UTC
AWS CloudWatch

6 campos. Usa ?.

# AWS EventBridge (6 fields, note the ?)
cron(0 9 ? * MON-FRI *)  # Weekdays 9AM UTC
Kubernetes CronJob

5 campos estándar. Timezone desde K8s 1.27+.

# Kubernetes CronJob spec
apiVersion: batch/v1
kind: CronJob
metadata:
  name: daily-backup
spec:
  schedule: "0 2 * * *"
  timeZone: "America/New_York"  # K8s 1.27+
Vercel Cron

5 campos en vercel.json. UTC.

// vercel.json
{
  "crons": [{
    "path": "/api/cron/daily-report",
    "schedule": "0 9 * * *"
  }]
}

6. Errores Comunes

Los errores más frecuentes con cron:

1
Zona horaria

Cron usa la zona del sistema. Plataformas CI/CD usan UTC.

2
Ejecuciones superpuestas

Usa flock o un archivo de bloqueo.

3
Horario de verano

Usa UTC para evitar problemas.

4
Día del mes Y día de la semana

Si ambos están definidos, el job se ejecuta cuando cualquiera coincida.

5
Sin soporte de segundos

Resolución mínima: 1 minuto. Para sub-minuto usa sleep.

6
Variables de entorno

Los jobs cron se ejecutan con entorno mínimo. Usa rutas completas.

# Gotcha: overlapping runs - use flock to prevent
*/5 * * * * /usr/bin/flock -n /tmp/myjob.lock /path/to/script.sh

# Gotcha: environment - always use full paths
0 2 * * * /usr/bin/python3 /home/user/scripts/backup.py >> /var/log/backup.log 2>&1

# Gotcha: 30-second workaround (two entries)
* * * * * /path/to/script.sh
* * * * * sleep 30 && /path/to/script.sh

# Gotcha: PATH not set - define it at the top of your crontab
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# Gotcha: percent signs (%) must be escaped in crontab
# Wrong:
0 0 * * * echo "Today is $(date +%Y-%m-%d)"
# Correct:
0 0 * * * echo "Today is $(date +\%Y-\%m-\%d)"

Sample Crontab File

Here is a complete, real-world crontab file combining several patterns discussed above:

# =============================================
# Crontab for: webserver (production)
# Last updated: 2025-01-15
# =============================================

# Environment
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO="ops-team@example.com"

# --- BACKUPS ---
# Full database backup at 2:00 AM daily
0 2 * * * /usr/bin/flock -n /tmp/db-backup.lock /opt/scripts/db-backup.sh >> /var/log/db-backup.log 2>&1

# Incremental file backup every 6 hours
0 */6 * * * /opt/scripts/file-backup.sh >> /var/log/file-backup.log 2>&1

# --- MAINTENANCE ---
# Clear temp files older than 7 days, daily at 3 AM
0 3 * * * /usr/bin/find /tmp -type f -mtime +7 -delete

# Rotate application logs every Sunday at 4 AM
0 4 * * 0 /opt/scripts/rotate-logs.sh >> /var/log/log-rotation.log 2>&1

# --- MONITORING ---
# Health check every 5 minutes
*/5 * * * * /opt/scripts/healthcheck.sh > /dev/null 2>&1

# SSL certificate expiry check daily at 6 AM
0 6 * * * /opt/scripts/check-ssl.sh

# Disk space alert if usage > 90%, every hour
0 * * * * /opt/scripts/disk-alert.sh

# --- REPORTS ---
# Send daily summary at 8 AM on weekdays
0 8 * * 1-5 /opt/scripts/daily-report.sh

# Monthly analytics report on the 1st at 9 AM
0 9 1 * * /opt/scripts/monthly-report.sh

7. Pruebas y Depuración

Antes de desplegar a producción:

1
Parser de expresiones

Usa nuestro Parser de Expresiones Cron.

2
Logs de cron

Revisa /var/log/syslog o /var/log/cron.

3
Redirigir salida

Captura stdout/stderr en un archivo log.

4
Probar con intervalos cortos

Prueba primero con * * * * *.

5
Configuración de correo

Define MAILTO="" para desactivar emails.

# Redirect all output to a log file
0 2 * * * /path/to/backup.sh >> /var/log/cron-backup.log 2>&1

# Disable cron mail for this job
0 2 * * * /path/to/backup.sh > /dev/null 2>&1

# Set MAILTO at the top of crontab
MAILTO=""
# Or send to a real address
MAILTO="admin@example.com"

# Check cron logs on Debian/Ubuntu
grep CRON /var/log/syslog | tail -20

# Check cron logs on CentOS/RHEL
grep CRON /var/log/cron | tail -20

# On systems using journald (systemd)
journalctl -u cron --since "1 hour ago"

# Quick test: add a job that writes to a file
# Then check if the file gets updated
* * * * * echo "cron works: $(date)" >> /tmp/cron-test.log

# Verify your crontab was saved correctly
crontab -l | grep -v '^#'

# Check if cron daemon is running
systemctl status cron    # Debian/Ubuntu
systemctl status crond   # CentOS/RHEL

Common Cron Debugging Checklist

CheckHow to Verify
Cron daemon running?systemctl status cron (or crond)
Crontab saved?crontab -l and look for your entry
Script executable?chmod +x /path/to/script.sh
Full paths used?Use which python3 to find full path
Output captured?Add >> /tmp/debug.log 2>&1
Permissions correct?Script owner = crontab owner
No syntax errors?bash -n /path/to/script.sh
Timezone correct?timedatectl or date to check

Construye y prueba tus expresiones cron:

8. Preguntas Frecuentes

¿Cuál es el formato de una expresión cron?

Una expresión cron tiene 5 campos: minuto (0-59), hora (0-23), día (1-31), mes (1-12) y día de la semana (0-7).

¿Qué significa */5 en cron?

*/5 significa "cada 5 unidades". En el campo de minutos, se ejecuta cada 5 minutos.

¿Cómo ejecutar un cron cada 30 segundos?

Cron no soporta intervalos sub-minuto. Crea dos entradas, una con sleep 30.

¿Cuál es la diferencia entre cron y crontab?

Cron es el daemon. Crontab es el archivo con los jobs programados.

¿Se puede usar cron en Windows?

Windows nativo no tiene cron. La alternativa es el Programador de tareas. Con WSL puedes usar cron normalmente.

𝕏 Twitterin LinkedIn
¿Fue útil?

Mantente actualizado

Recibe consejos de desarrollo y nuevas herramientas.

Sin spam. Cancela cuando quieras.

Prueba estas herramientas relacionadas

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

Artículos relacionados

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

Generador y analizador de expresiones cron gratuito. Aprende sintaxis cron y programa tareas con Node.js, Python y Bash.

Validación YAML Docker Compose: 10 errores de sintaxis comunes y cómo corregirlos

Deja de perder tiempo con errores YAML de Docker Compose. Aprende a identificar y corregir los 10 errores más comunes.