5.3 Tareas Programadas en Linux: Cron y systemd timers¶
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¶
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¶
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¶
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:
➡️ Ejecuta a las 02:00 cada día.
3. Tipos de crontab¶
- Usuario:
- Sistema:
Diferencia clave:
/etc/crontabincluye campo de usuario:
4. Variables de entorno en cron¶
Cron ejecuta en un entorno mínimo:
Variables importantes:
Entorno limitado
Muchos scripts fallan en cron porque dependen de variables que no están definidas.
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¶
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¶
Paso 1: Editar crontab¶
Paso 2: Añadir tarea¶
Explicación¶
0 2 * * *→ ejecución diaria a las 02:00.>>→ append a log.2>&1→ redirige errores a log.
Paso 3: Verificar tareas¶
Paso 4: Comprobar logs¶
Parte 2: Implementación con systemd timers¶
Paso 1: Crear servicio¶
Contenido:
Paso 2: Crear timer¶
Contenido:
[Unit]
Description=Timer de backup diario
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Explicación¶
- OnCalendar → programación temporal.
- Persistent=true → ejecuta si el sistema estuvo apagado.
Paso 3: Activar timer¶
Paso 4: Ver timers activos¶
Paso 5: Ver logs¶
Errores Comunes y Troubleshooting¶
1. Script funciona manualmente pero no en cron¶
Causa:
- PATH incorrecto.
Solución:
Añadir al inicio del crontab.
2. No se ejecuta la tarea¶
Verifica:
3. Falta de permisos¶
Cron no ejecuta si no tiene permisos:
4. Problemas de entorno¶
Usa rutas absolutas siempre:
5. Timer no ejecuta¶
Verifica:
Buenas Prácticas (Nivel Senior)¶
1. Redirección de logs siempre¶
2. Evita solapamiento de ejecuciones¶
Usa flock:
3. Usa systemd timers para producción crítica¶
Ventajas:
- tolerancia a fallos
- logs centralizados
- dependencias
4. Centraliza scripts¶
Ubicaciones recomendadas:
/usr/local/bin/opt/scripts
5. Monitoriza ejecuciones¶
Ejemplo simple:
6. Seguridad¶
- No ejecutes como root si no es necesario.
- Valida scripts antes de programar.
7. Versionado¶
Guarda scripts en Git:
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.