Guia de expresiones cron: sintaxis, ejemplos y generador visual gratis
Aprende la sintaxis de cron jobs paso a paso. Ejemplos comunes, generador visual online y como programar tareas automaticas en Linux y servidores.
Que es una expresion cron y para que sirve
Un cron job es una tarea programada que se ejecuta automaticamente en un horario definido en sistemas Unix/Linux. La expresion cron es la sintaxis que define CUANDO se ejecuta.
Formato: * * * * * (5 campos separados por espacios)
minuto hora dia-del-mes mes dia-de-la-semana
Ejemplos rapidos:
0 9 * * *→ Cada dia a las 9:00 AM*/15 * * * *→ Cada 15 minutos0 0 * * 0→ Cada domingo a medianoche0 0 1 * *→ Primer dia de cada mes a medianoche
Genera expresiones cron visualmente con el generador de cron de NexTools.
La sintaxis cron explicada campo por campo
| Campo | Valores | Caracteres especiales |
|---|---|---|
| Minuto | 0-59 | * , - / |
| Hora | 0-23 | * , - / |
| Dia del mes | 1-31 | * , - / |
| Mes | 1-12 (o JAN-DEC) | * , - / |
| Dia de semana | 0-7 (0 y 7 = domingo) o SUN-SAT | * , - / |
Caracteres especiales:
*= cualquier valor ("todos"),= lista de valores (1,3,5= lunes, miercoles, viernes)-= rango (1-5= lunes a viernes)/= incremento (*/10= cada 10 unidades)
Ejemplos de expresiones cron comunes
| Expresion | Significado |
|---|---|
0 * * * * | Cada hora en punto |
*/5 * * * * | Cada 5 minutos |
0 9 * * 1-5 | Lunes a viernes a las 9 AM |
0 0 * * * | Cada dia a medianoche |
0 0 * * 0 | Cada domingo a medianoche |
0 6,18 * * * | A las 6 AM y 6 PM cada dia |
0 0 1 * * | Primer dia de cada mes |
0 0 1 1 * | 1 de enero a medianoche (anual) |
30 2 * * 1 | Cada lunes a las 2:30 AM |
0 9-17 * * 1-5 | Cada hora de 9 AM a 5 PM, lun-vie |
Si necesitas convertir estas horas entre zonas horarias, usa el conversor de zonas horarias de NexTools.
Como usar el generador de cron de NexTools
El generador de cron de NexTools:
Paso 1: Selecciona la frecuencia deseada con los controles visuales.
Paso 2: Ve la expresion cron generada automaticamente.
Paso 3: Ve una descripcion legible de cuando se ejecutara ("Cada lunes a las 9:00 AM").
Paso 4: Copia la expresion para usarla en crontab, CI/CD o tu servidor.
Tambien puedes pegar una expresion cron existente y el generador te muestra su significado en lenguaje natural.
Cron en la practica: crontab, CI/CD y cloud
Linux crontab:
crontab -e → edita tu crontab personal.
0 9 * * * /usr/bin/python3 /home/user/backup.py → ejecuta backup.py cada dia a las 9 AM.
Vercel: En vercel.json:
{ "crons": [{ "path": "/api/daily-task", "schedule": "0 9 * * *" }] }
GitHub Actions:
on:
schedule:
- cron: '0 9 * * 1-5'
AWS CloudWatch: Usa expresiones cron pero con 6 campos (agrega segundos o ano).
Importante: Los cron jobs en servidores usan la zona horaria del servidor (generalmente UTC). Usa la herramienta de zonas horarias para calcular la hora UTC correcta.
Errores comunes con cron jobs
1. Zona horaria incorrecta. Tu servidor esta en UTC pero escribes la hora en tu zona local. Un cron a "0 9 * * *" en UTC es las 4 AM en Mexico (UTC-5). Solución: calcula la hora UTC antes de escribir el cron.
2. Horario de verano (DST). Un cron a las 2:30 AM puede ejecutarse 0 o 2 veces el dia del cambio de horario. Solucion: usa UTC para evitar ambiguedad.
3. No redirigir output. Sin > /dev/null 2>&1, el output del cron se envia como email al usuario del sistema. Si el email no esta configurado, se acumula silenciosamente.
4. Path incorrecto. Cron no carga el PATH normal del usuario. Usa rutas absolutas: /usr/bin/python3 no solo python3.
5. Permisos. El script debe ser ejecutable (chmod +x script.sh) y el usuario de cron debe tener permisos.
Alternativas modernas a cron
systemd timers (Linux): Reemplazo moderno de cron en sistemas con systemd. Mas flexible (puede depender de otros servicios, reintentar en fallo).
Vercel Cron Jobs: Ejecuta funciones serverless en schedule. Sin servidor propio.
GitHub Actions scheduled: Ejecuta workflows en schedule. Gratuito para repos publicos.
Cloud Scheduler (GCP), EventBridge (AWS), Logic Apps (Azure): Servicios cloud de scheduling con integraciones nativas.
BullMQ (Node.js): Cola de trabajos con scheduling basado en cron. Para aplicaciones que necesitan mas control que un cron basico.
Cron con 6 o 7 campos: variantes no-estandar
Algunos sistemas extienden la sintaxis estandar de 5 campos:
6 campos (segundos): seg min hora dia mes dia-sem. Usado en Spring Boot, Quartz (Java). 0 0 9 * * * = cada dia a las 9:00:00.
7 campos (ano): seg min hora dia mes dia-sem ano. Usado en AWS CloudWatch.
@keywords (crontab):
@yearly=0 0 1 1 *@monthly=0 0 1 * *@weekly=0 0 * * 0@daily=0 0 * * *@hourly=0 * * * *@reboot= ejecutar al iniciar el sistema
El generador de NexTools soporta la sintaxis estandar de 5 campos, la mas universal.
Prueba esta herramienta:
Abrir herramienta→Preguntas frecuentes
Que significa */5 en una expresion cron
El / indica incremento. */5 en el campo de minutos significa 'cada 5 minutos' (0, 5, 10, 15...). */15 seria cada 15 minutos. */2 cada 2 unidades del campo donde este.
Como ejecuto un cron job cada 30 segundos
Cron estandar no soporta intervalos menores a 1 minuto. Opciones: (1) Ejecutar cada minuto con sleep: '* * * * * command && sleep 30 && command'. (2) Usar systemd timer con OnUnitActiveSec=30s. (3) Usar un loop en el script con sleep.
En que zona horaria se ejecutan los cron jobs
En la zona horaria del servidor, generalmente UTC. Verifica con 'date' en el servidor. Para evitar confusiones con DST, configura crons en UTC y calcula mentalmente la hora local.
Como debuggeo un cron job que no se ejecuta
Verifica: (1) que el script funciona manualmente, (2) rutas absolutas en el cron, (3) permisos del script, (4) que el servicio cron esta activo ('systemctl status cron'), (5) logs de cron (/var/log/syslog o /var/log/cron), (6) redirige output a un archivo para ver errores.
Puedo usar nombres de meses y dias en cron
Si. En el campo de mes: JAN-DEC. En dia de semana: SUN-SAT (o MON-FRI). '0 9 * * MON-FRI' = lunes a viernes a las 9. No todos los sistemas soportan nombres; los numeros son mas universales.
Que pasa si un cron job tarda mas de lo esperado y se superpone con la siguiente ejecucion
Cron NO espera a que termine la ejecucion anterior. Si un job de 2 minutos esta programado cada minuto, tendras 2 instancias corriendo simultaneamente. Solucion: usa un lock file (flock) para evitar ejecuciones superpuestas.