Cron es el planificador de tareas de Unix desde 1975 y sigue siendo la forma más simple de ejecutar scripts periódicos. Su sintaxis, sin embargo, es notoriamente propensa a errores: una expresión mal escrita puede ejecutar tu backup cada minuto o no ejecutarlo nunca. Este generador de cron te muestra en lenguaje natural qué hace cada expresión y ofrece presets para los patrones más comunes.
La sintaxis de cinco campos
Una expresión cron clásica tiene cinco campos: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12) y día de la semana (0-7, donde 0 y 7 son domingo). El asterisco * significa 'todos los valores'. `0 3 * * *` = cada día a las 3:00. `*/15 * * * *` = cada 15 minutos. `0 9 * * 1-5` = a las 9:00 de lunes a viernes.
Extensiones no estándar (Vixie/cronie)
La mayoría de crons modernos aceptan atajos: @reboot (al arrancar), @daily (0 0 * * *), @hourly (0 * * * *), @weekly, @monthly. Nombres de meses y días (mon, tue, jan…) también funcionan. Ojo: no son portables a todos los sistemas (Alpine BusyBox no los soporta).
Cron en contenedores y systemd timers
En contenedores efímeros cron es incómodo (necesita un proceso siempre vivo y no gestiona logs bien). Alternativas modernas: un job Kubernetes CronJob, un timer systemd (más flexible y con logs en journald) o un scheduler externo (Airflow, Temporal, Rundeck). Para tareas simples en un servidor tradicional, cron sigue siendo imbatible.
Errores frecuentes en producción
El error más común: no redirigir stdout/stderr, así que si la tarea falla nadie se entera. Solución: `>>/var/log/mytask.log 2>&1`. Otro: no bloquear ejecuciones solapadas (usa `flock`). Y otro: no fijar PATH en el crontab, provocando 'command not found' aunque el binario exista en el shell interactivo.
Casos de uso comunes
- Backups diarios de una base de datos o directorio.
- Rotación y compresión de logs.
- Renovación automática de certificados Let's Encrypt.
- Sincronización periódica con rsync entre servidores.
Buenas prácticas
- Redirige siempre salida y errores a un log.
- Usa flock para evitar solapes en tareas lentas.
- Define PATH y variables de entorno al inicio del crontab.
- Monitoriza que la tarea se ejecutó (healthcheck ping a Cronitor o Healthchecks.io).