Cron
This content is not available in your language yet.
5.3 Tareas Programadas en Linux: Cron y systemd timers
Sección titulada «5.3 Tareas Programadas en Linux: Cron y systemd timers»Introducción
Sección titulada «Introducción»La automatización es uno de los pilares de la administración de sistemas. En entornos Linux, la ejecución programada de tareas permite realizar mantenimientos, copias de seguridad, rotación de logs o chequeos de estado sin intervención manual. Tradicionalmente, esto se ha gestionado con cron, pero los sistemas modernos introducen systemd timers como alternativa avanzada.
Como Sysadmin, debes dominar ambos enfoques: cron por su simplicidad y compatibilidad universal, y systemd timers por su integración con el ecosistema moderno de Linux.
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»Al finalizar este capítulo serás capaz de:
- Comprender cómo funciona el sistema cron.
- Escribir y gestionar tareas programadas con crontab.
- Interpretar la sintaxis de programación temporal.
- Diagnosticar fallos en ejecuciones automáticas.
- Implementar tareas programadas con systemd timers.
- Elegir entre cron y systemd según el caso de uso.
Conceptos Teóricos
Sección titulada «Conceptos Teóricos»1. ¿Qué es cron?
Sección titulada «1. ¿Qué es cron?»-cron* es un servicio que ejecuta comandos o scripts en intervalos definidos.
Componentes clave:
- crond: daemon que ejecuta tareas.
- crontab: archivo donde se definen las tareas.
2. Sintaxis de crontab
Sección titulada «2. Sintaxis de crontab»Cada línea tiene 5 campos temporales + comando:
- * * * * comando│ │ │ │ ││ │ │ │ └── Día semana (0-7)│ │ │ └──── Mes (1-12)│ │ └────── Día mes (1-31)│ └──────── Hora (0-23)└────────── Minuto (0-59)Ejemplo:
0 2 * * * /usr/local/bin/backup.sh➡️ Ejecuta a las 02:00 cada día.
3. Tipos de crontab
Sección titulada «3. Tipos de crontab»- Usuario:
crontab -e- Sistema:
/etc/crontab/etc/cron.d/Diferencia clave:
/etc/crontabincluye campo de usuario:
0 3 * * * root /script.sh4. Variables de entorno en cron
Sección titulada «4. Variables de entorno en cron»Cron ejecuta en un entorno mínimo:
Variables importantes:
PATHHOMESHELL5. systemd timers
Sección titulada «5. systemd timers»Alternativa moderna a cron:
Ventajas:
- Integración con systemd.
- Registro centralizado en journal.
- Mejor control de dependencias.
- Mayor flexibilidad temporal.
Ejemplo:
backup.servicebackup.timer
Laboratorio Práctico
Sección titulada «Laboratorio Práctico»Escenario
Sección titulada «Escenario»Necesitas programar una copia de seguridad diaria y asegurarte de que:
- Se ejecuta automáticamente.
- Registra logs.
- Puede auditarse fácilmente.
Parte 1: Implementación con cron
Sección titulada «Parte 1: Implementación con cron»Paso 1: Editar crontab
Sección titulada «Paso 1: Editar crontab»crontab -ePaso 2: Añadir tarea
Sección titulada «Paso 2: Añadir tarea»0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Explicación
Sección titulada «Explicación»0 2 * * *→ ejecución diaria a las 02:00.>>→ append a log.2>&1→ redirige errores a log.
Paso 3: Verificar tareas
Sección titulada «Paso 3: Verificar tareas»crontab -lPaso 4: Comprobar logs
Sección titulada «Paso 4: Comprobar logs»cat /var/log/backup.logParte 2: Implementación con systemd timers
Sección titulada «Parte 2: Implementación con systemd timers»Paso 1: Crear servicio
Sección titulada «Paso 1: Crear servicio»sudo nano /etc/systemd/system/backup.serviceContenido:
[Unit]Description=Backup diario
[Service]Type=oneshotExecStart=/usr/local/bin/backup.shPaso 2: Crear timer
Sección titulada «Paso 2: Crear timer»sudo nano /etc/systemd/system/backup.timerContenido:
[Unit]Description=Timer de backup diario
[Timer]OnCalendar=*-*-* 02:00:00Persistent=true
[Install]WantedBy=timers.targetExplicación
Sección titulada «Explicación»- OnCalendar → programación temporal.
- Persistent=true → ejecuta si el sistema estuvo apagado.
Paso 3: Activar timer
Sección titulada «Paso 3: Activar timer»sudo systemctl daemon-reloadsudo systemctl enable --now backup.timerPaso 4: Ver timers activos
Sección titulada «Paso 4: Ver timers activos»systemctl list-timersPaso 5: Ver logs
Sección titulada «Paso 5: Ver logs»journalctl -u backup.serviceErrores Comunes y Troubleshooting
Sección titulada «Errores Comunes y Troubleshooting»1. Script funciona manualmente pero no en cron
Sección titulada «1. Script funciona manualmente pero no en cron»-Causa:*
- PATH incorrecto.
-Solución:*
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binAñadir al inicio del crontab.
2. No se ejecuta la tarea
Sección titulada «2. No se ejecuta la tarea»Verifica:
systemctl status cron3. Falta de permisos
Sección titulada «3. Falta de permisos»Cron no ejecuta si no tiene permisos:
chmod +x script.sh4. Problemas de entorno
Sección titulada «4. Problemas de entorno»Usa rutas absolutas siempre:
/home/user/script.sh5. Timer no ejecuta
Sección titulada «5. Timer no ejecuta»Verifica:
systemctl status backup.timerBuenas Prácticas (Nivel Senior)
Sección titulada «Buenas Prácticas (Nivel Senior)»1. Redirección de logs siempre
Sección titulada «1. Redirección de logs siempre»>> /var/log/script.log 2>&12. Evita solapamiento de ejecuciones
Sección titulada «2. Evita solapamiento de ejecuciones»Usa flock:
flock -n /tmp/script.lock /usr/local/bin/script.sh3. Usa systemd timers para producción crítica
Sección titulada «3. Usa systemd timers para producción crítica»Ventajas:
- tolerancia a fallos
- logs centralizados
- dependencias
4. Centraliza scripts
Sección titulada «4. Centraliza scripts»Ubicaciones recomendadas:
/usr/local/bin/opt/scripts
5. Monitoriza ejecuciones
Sección titulada «5. Monitoriza ejecuciones»Ejemplo simple:
grep CRON /var/log/syslog6. Seguridad
Sección titulada «6. Seguridad»- No ejecutes como root si no es necesario.
- Valida scripts antes de programar.
7. Versionado
Sección titulada «7. Versionado»Guarda scripts en Git:
git init /opt/scriptsResumen y Siguiente Paso
Sección titulada «Resumen y Siguiente Paso»Ahora dominas la automatización en Linux mediante cron y systemd timers. Sabes cuándo usar cada herramienta, cómo programar tareas fiables y cómo diagnosticar fallos en entornos reales.
Este conocimiento es clave para mantener sistemas autónomos y reducir la intervención manual.
El siguiente paso es aplicar todo esto en el ámbito de red:
6.1 Configuración de Red en Linux, donde aprenderás a configurar interfaces, routing y conectividad en entornos productivos.
