Anatomía de una expresión cron
Cron es un demonio de Unix que ejecuta comandos en horarios programados. Existe desde 1975 y prácticamente no cambió en su sintaxis básica. Una expresión cron 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-6, 0=Domingo)
│ │ │ │ │
* * * * * Caracteres especiales
- * — cualquier valor.
* * * * *es cada minuto. - , — lista de valores.
0 9,12,18 * * *a las 9, 12 y 18. - - — rango.
0 9-17 * * *cada hora de 9 a 17. - / — paso.
*/5 * * * *cada 5 minutos.
Ejemplos prácticos
0 0 * * *— todos los días a medianoche.*/15 * * * *— cada 15 minutos.0 9 * * 1-5— de lunes a viernes a las 9 AM.0 0 1 * *— el primer día de cada mes a medianoche.0 0 * * 0— todos los domingos a medianoche.30 14 * * 6— todos los sábados a las 14:30.
Casos de uso típicos
- Backups. Diarios a la madrugada cuando hay menos carga.
- Reportes automáticos. Generar y enviar un dashboard cada lunes a las 8 AM.
- Limpieza de archivos temporales. Borrar /tmp cada hora.
- Jobs de procesamiento. Ejecutar análisis de datos cada noche.
- Health checks. Pingear endpoints cada minuto.
- Sincronización con APIs. Pull de datos cada 15 minutos.
Trampas comunes
- Día del mes Y día de semana.
0 0 1 * 1NO es "primer día del mes Y lunes". Es "primer día del mes O lunes". El operador es OR cuando ambos están especificados. - Zona horaria. Cron usa la zona horaria del servidor. Si tu server está en UTC y querés ejecutar a las 9 AM Buenos Aires (UTC-3), poné
0 12 * * *. - Usuarios de cron. En Linux, cada usuario tiene su crontab.
crontab -eedita el del usuario actual;sudo crontab -eedita el de root. - PATH y entorno. Los jobs de cron corren en un entorno mínimo. Si tu script depende de variables de entorno, definilas explícitamente al inicio.
Alternativas modernas a cron
Cron sigue vivo pero hay alternativas más sofisticadas. systemd timers en Linux ofrecen logging integrado, dependencias, ejecución a la próxima oportunidad si el sistema estaba apagado. GitHub Actions y GitLab CI permiten schedules con sintaxis cron pero corriendo en infraestructura cloud. AWS EventBridge y Google Cloud Scheduler son las opciones gestionadas.
Validación antes de poner en producción
Pegar mal una expresión cron puede traer consecuencias. Si pretendías "una vez por día a la 1 AM" pero terminaste con 1 * * * * (a los 01 minutos de cada hora), te ejecutó 24 veces en lugar de 1. Antes de subir a producción, verificá la expresión con un explicador en lenguaje natural y asegurate de que la próxima ejecución es la que esperabas.