cron jobs
``
Herramientas útiles
- Crontab.guru - The cron schedule expression generator
- Generador y validador visual de expresiones cron
- Crontab.guru
Documentación y recursos
- ¿Qué son los Cron Jobs y para qué sirven - cdmon-que-son-los-cron-jobs-y-para-que-sirven
- Cron Job una guía completa para principiantes-cron-job12_Ejemplos_de_sintaxis_de_Cron
Contexto y relación con el ecosistema
- Automatizacion y Build
- Automatizacion
- Backend
- devops
Los cron jobs son una pieza fundamental en sistemas Unix/Linux para la ejecución automática de tareas programadas. Se integran de forma natural en flujos de automatización, operaciones backend y DevOps, permitiendo ejecutar procesos sin intervención humana en momentos específicos o de forma recurrente.
¿Qué es cron?
cron es un demonio del sistema que se ejecuta en segundo plano y se encarga de lanzar tareas (jobs) según una planificación definida por el usuario.
- Funciona a nivel de sistema operativo.
- Lee configuraciones desde archivos llamados crontabs.
- Es extremadamente ligero, estable y disponible por defecto en la mayoría de distribuciones Linux y Unix.
¿Qué es un cron job?
Un cron job es una tarea programada que cron ejecuta automáticamente cuando se cumple una condición temporal.
- Puede ejecutar:
- Comandos de shell
- Scripts (bash, python, node, php, etc.)
- Binarios del sistema
- Se define mediante una expresión de tiempo + comando
- Puede pertenecer a:
- Un usuario concreto
- El sistema (cron del sistema)
Casos de uso habituales
- Backups automáticos de bases de datos
- Limpieza de archivos temporales o logs
- Ejecución de ETLs y procesos batch
- Envío de emails programados
- Sincronización de datos con APIs externas
- Tareas de mantenimiento (rotación de logs, chequeos)
- Builds nocturnos o tareas de integración
- Ejecución de scripts de scraping periódicos
Crontab
La crontab es el archivo donde se definen los cron jobs.
- Cada usuario puede tener su propia crontab
- El sistema también tiene crontabs globales
- Se edita normalmente con:
crontab -e
- Se lista con:
crontab -l
Ubicaciones comunes
/var/spool/cron//etc/crontab/etc/cron.d//etc/cron.daily//etc/cron.hourly//etc/cron.weekly//etc/cron.monthly/
Sintaxis de cron
Una expresión cron estándar tiene cinco campos de tiempo seguidos del comando:
┌──────── minuto (0 - 59)
│ ┌────── hora (0 - 23)
│ │ ┌──── día del mes (1 - 31)
│ │ │ ┌── mes (1 - 12)
│ │ │ │ ┌─ día de la semana (0 - 7) (domingo = 0 o 7)
│ │ │ │ │
- - - - - comando
Valores permitidos
*→ cualquier valor,→ lista de valores-→ rango/→ pasos o intervalos
Ejemplos de expresiones cron
- Ejecutar cada minuto:
* * * * *
- Ejecutar cada día a las 02:00:
0 2 * * *
- Ejecutar cada lunes a las 09:30:
30 9 * * 1
- Ejecutar cada 5 minutos:
*/5 * * * *
- Ejecutar el primer día de cada mes:
0 0 1 * *
Variables de entorno en cron
Los cron jobs no cargan el entorno completo del usuario, lo que implica:
- PATH limitado
- Variables de entorno no disponibles
- No se ejecutan
.bashrco.profile
Buenas prácticas:
- Usar rutas absolutas (
/usr/bin/python) - Definir variables explícitamente
- Cargar un script que inicialice el entorno
Ejemplo:
PATH=/usr/local/bin:/usr/bin:/bin
Gestión de salida y logs
Por defecto:
- La salida estándar y de error se envían por email al usuario
Prácticas comunes:
- Redirigir stdout y stderr a archivos de log
- Centralizar logs para depuración
Ejemplo:
0 2 * * * /script.sh >> /var/log/script.log 2>&1
Permisos y seguridad
- El cron job se ejecuta con los permisos del usuario propietario
- Es crítico:
- Validar scripts
- Limitar permisos de escritura
- Evitar ejecución como root salvo necesidad
Archivos relevantes:
/etc/cron.allow/etc/cron.deny
Cron del sistema vs cron de usuario
Cron de usuario
- Configurado con
crontab -e - Más sencillo
- Ideal para tareas personales o de aplicaciones
Cron del sistema
- Definido en
/etc/crontabo/etc/cron.d - Incluye campo adicional de usuario
- Usado para tareas administrativas
Cron y DevOps
En entornos modernos:
- Se usa cron para:
- Jobs de mantenimiento
- Orquestación simple
- Se complementa o sustituye por:
- Kubernetes CronJobs
- CI/CD schedulers
- Sistemas de colas y workers
Cron sigue siendo:
- Fiable
- Predecible
- Fácil de auditar
Limitaciones de cron
- No gestiona dependencias entre jobs
- No tiene control de estado ni reintentos
- No es adecuado para flujos complejos
- Difícil de escalar horizontalmente
Buenas prácticas
- Documentar cada cron job
- Usar scripts versionados
- Añadir logs y alertas
- Evitar solapamiento de ejecuciones
- Probar manualmente antes de automatizar
- Revisar periódicamente jobs obsoletos
cron jobs — estado en 2025, recursos web y alternativas
``
Estado de cron en 2025
En 2025, cron sigue siendo una herramienta vigente, estable y ampliamente usada en sistemas Unix/Linux. A pesar del auge de plataformas cloud, orquestadores y sistemas distribuidos, cron mantiene su relevancia por su simplicidad, fiabilidad y bajo coste operativo.
- Presente por defecto en prácticamente todas las distribuciones Linux
- Mínima sobrecarga de recursos
- Comportamiento predecible y bien conocido
- Ideal para:
- Servidores tradicionales
- VPS
- Máquinas on-premise
- Automatizaciones simples y medianas
Cron no ha cambiado conceptualmente, pero su rol ha evolucionado dentro de arquitecturas modernas.
Cron en arquitecturas modernas
En 2025 cron suele ocupar uno de estos roles:
- Automatización local en servidores
- Orquestación básica de scripts
- Lanzador de jobs que delegan trabajo a:
- APIs
- Colas de mensajes
- Workers distribuidos
- Soporte a pipelines legacy
En muchos equipos:
- cron = capa base
- Herramientas modernas = capas superiores
Ventajas que lo mantienen vigente
- Curva de aprendizaje mínima
- No depende de terceros
- Fácil de versionar indirectamente (infra como código)
- Ideal para tareas deterministas
- Muy difícil de romper
Limitaciones frente a soluciones modernas
- Sin gestión nativa de:
- Retries
- Estados
- Dependencias
- Observabilidad avanzada
- Escalado limitado
- Difícil de usar en entornos efímeros (containers)
Estas limitaciones explican la aparición de alternativas especializadas.
Recursos web actualizados
Referencias oficiales
Alternativas modernas a cron
Kubernetes CronJobs
Pensado para entornos cloud-native.
- Ejecución de jobs programados en clusters Kubernetes
- Escalado y aislamiento por contenedor
- Integración con observabilidad y secrets
Características:
- Reemplazo natural de cron en clusters
- Gestión declarativa (YAML)
- Alta disponibilidad
Schedulers en CI/CD
Herramientas como:
- GitHub Actions (scheduled workflows)
- GitLab CI Schedules
- Jenkins Scheduled Jobs
Uso típico:
- Builds nocturnos
- Tests periódicos
- Automatización de pipelines
Ventajas:
- Integración con repositorios
- Logs centralizados
- Notificaciones automáticas
Orquestadores de workflows
Apache Airflow
- DAGs complejos
- Dependencias explícitas
- Ideal para data pipelines
Prefect / Dagster
- Alternativas modernas a Airflow
- Mejor experiencia de desarrollo
- Observabilidad integrada
Adecuado cuando:
- Hay flujos complejos
- Existen dependencias temporales
- Se requiere reintento y control de estado
Job schedulers distribuidos
- Nomad
- Celery Beat
- Quartz Scheduler
Usados cuando:
- Se necesita escalado horizontal
- Los jobs son distribuidos
- Hay alta frecuencia o carga
Alternativas serverless
- AWS EventBridge + Lambda
- Google Cloud Scheduler
- Azure Logic Apps / Functions
Ventajas:
- Sin gestión de servidores
- Alta disponibilidad
- Pago por uso
Desventajas:
- Dependencia del proveedor
- Coste a largo plazo
- Menor control bajo nivel
¿Cuándo usar cron en 2025?
Cron sigue siendo la mejor opción cuando:
- El entorno es simple
- La tarea es determinista
- No hay dependencias complejas
- Se ejecuta en un único host
- Se busca estabilidad y bajo mantenimiento
¿Cuándo evitar cron?
Conviene evitarlo cuando:
- Hay flujos complejos
- Se requieren retries inteligentes
- Se necesita observabilidad avanzada
- El sistema es distribuido
- El entorno es altamente dinámico
Convivencia cron + alternativas
Patrón común en 2025:
- cron lanza scripts ligeros
- scripts disparan jobs en:
- Kubernetes
- Airflow
- APIs cloud
- cron actúa como disparador, no como orquestador
Tendencia general
- cron no desaparece
- Se consolida como herramienta base
- Convive con sistemas más avanzados
- Sigue siendo esencial en DevOps, backend y automatización
cron jobs — casos de uso completos y ejemplos de código
Relación con el ecosistema
- Automatizacion y Build
- Automatizacion
- Backend
- devops
Caso de uso: backup automático de base de datos
Escenario típico en backend y operaciones: generar copias de seguridad periódicas y almacenarlas de forma segura.
Script de backup (bash)
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H-%M")
BACKUP_DIR="/var/backups/mysql"
DB_NAME="app_db"
DB_USER="backup_user"
mkdir -p $BACKUP_DIR
/usr/bin/mysqldump -u $DB_USER $DB_NAME > $BACKUP_DIR/backup_$DATE.sql
`
Cron job asociado
0 2 * * * /usr/local/bin/db_backup.sh >> /var/log/db_backup.log 2>&1
- Ejecuta todos los días a las 02:00
- Redirige logs para auditoría
- Uso habitual en servidores on-premise o VPS
Caso de uso: limpieza de archivos temporales
Mantenimiento automático para evitar consumo innecesario de disco.
Script de limpieza
#!/bin/bash
find /tmp/app-cache -type f -mtime +7 -delete
Cron job asociado
30 3 * * 0 /usr/local/bin/cleanup_tmp.sh
- Se ejecuta cada domingo a las 03:30
- Elimina archivos con más de 7 días
- Muy común en entornos DevOps
Caso de uso: ejecución periódica de scraping
Uso frecuente en backend y automatización de datos.
Script de scraping (Python)
import requests
from datetime import datetime
url = "https://api.example.com/data"
response = requests.get(url)
with open("/data/scraping/output.json", "w") as f:
f.write(response.text)
print("Scraping ejecutado:", datetime.now())
Cron job asociado
*/15 * * * * /usr/bin/python3 /srv/scraping/scraper.py >> /var/log/scraper.log 2>&1
- Ejecuta cada 15 minutos
-
Uso típico para:
- ETLs
- Agregación de datos
- Monitorización externa
Caso de uso: envío de emails programados
Automatización de notificaciones o reportes.
Script de envío (Node.js)
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
sendmail: true,
newline: "unix",
path: "/usr/sbin/sendmail"
});
transporter.sendMail({
from: "noreply@app.com",
to: "admin@app.com",
subject: "Reporte diario",
text: "El sistema sigue operativo."
});
Cron job asociado
0 8 * * 1-5 /usr/bin/node /srv/mail/daily_report.js
- Lunes a viernes a las 08:00
- Envío automático de reportes
- Integración sencilla con scripts existentes
Caso de uso: build y tareas nocturnas
Automatización de procesos de build fuera de horario laboral.
Script de build
#!/bin/bash
cd /srv/app
/usr/bin/git pull origin main
/usr/bin/npm install
/usr/bin/npm run build
Cron job asociado
0 1 * * * /srv/app/nightly_build.sh >> /var/log/build.log 2>&1
- Build nocturno
- Reduce impacto en horas pico
- Muy usado antes de pipelines CI/CD completos
Caso de uso: verificación de salud del sistema
Chequeos simples sin necesidad de herramientas externas.
Script de healthcheck
#!/bin/bash
if ! systemctl is-active --quiet nginx; then
echo "Nginx caído" | mail -s "ALERTA" admin@app.com
fi
Cron job asociado
*/5 * * * * /usr/local/bin/healthcheck.sh
- Ejecuta cada 5 minutos
- Envía alerta si un servicio falla
- Alternativa ligera a sistemas de monitoring
Caso de uso: sincronización de datos con API externa
Integración periódica entre sistemas.
Script de sincronización
#!/bin/bash
curl -X POST https://api.partner.com/sync \
-H "Authorization: Bearer TOKEN" \
-d @/data/payload.json
Cron job asociado
0 */6 * * * /usr/local/bin/sync_partner.sh
- Cada 6 horas
- Integración clásica en backend empresarial
Caso de uso: rotación manual de logs
Complemento o alternativa a logrotate.
Script de rotación
#!/bin/bash
LOG="/var/log/app/app.log"
ARCHIVE="/var/log/app/archive/app_$(date +%F).log"
mv $LOG $ARCHIVE
touch $LOG
Cron job asociado
0 0 * * * /usr/local/bin/rotate_logs.sh
- Rotación diaria
- Control total sobre formato y nombres
Patrones comunes en ejemplos reales
- Uso de rutas absolutas
- Redirección de logs
- Scripts versionados
- Cron como disparador, no como lógica compleja
Herramientas de apoyo
-
Crontab.guru - The cron schedule expression generator
- Crontab.guru
- Validación y pruebas de expresiones cron
Buenas prácticas aplicadas en los ejemplos
- Separar cron y lógica de negocio
- Scripts pequeños y testeables
- Logging explícito
- Frecuencias razonables
- Evitar solapamiento de ejecuciones
¿Te gusta este contenido? Suscríbete vía RSS