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 .bashrc o .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/crontab o /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

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

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