Skip to content

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»

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.


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.

-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.

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:

Ventana de terminal
0 2 * * * /usr/local/bin/backup.sh

➡️ Ejecuta a las 02:00 cada día.


  • Usuario:
Ventana de terminal
crontab -e
  • Sistema:
Ventana de terminal
/etc/crontab
/etc/cron.d/

Diferencia clave:

  • /etc/crontab incluye campo de usuario:
0 3 * * * root /script.sh

Cron ejecuta en un entorno mínimo:

Variables importantes:

PATH
HOME
SHELL

Alternativa moderna a cron:

Ventajas:

  • Integración con systemd.
  • Registro centralizado en journal.
  • Mejor control de dependencias.
  • Mayor flexibilidad temporal.

Ejemplo:

  • backup.service
  • backup.timer

Necesitas programar una copia de seguridad diaria y asegurarte de que:

  • Se ejecuta automáticamente.
  • Registra logs.
  • Puede auditarse fácilmente.

Ventana de terminal
crontab -e

Ventana de terminal
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
  • 0 2 * * * → ejecución diaria a las 02:00.
  • >> → append a log.
  • 2>&1 → redirige errores a log.

Ventana de terminal
crontab -l

Ventana de terminal
cat /var/log/backup.log

Ventana de terminal
sudo nano /etc/systemd/system/backup.service

Contenido:

[Unit]
Description=Backup diario
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

Ventana de terminal
sudo nano /etc/systemd/system/backup.timer

Contenido:

[Unit]
Description=Timer de backup diario
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target

  • OnCalendar → programación temporal.
  • Persistent=true → ejecuta si el sistema estuvo apagado.

Ventana de terminal
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer

Ventana de terminal
systemctl list-timers

Ventana de terminal
journalctl -u backup.service

1. Script funciona manualmente pero no en cron

Sección titulada «1. Script funciona manualmente pero no en cron»

-Causa:*

  • PATH incorrecto.

-Solución:*

Ventana de terminal
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Añadir al inicio del crontab.


Verifica:

Ventana de terminal
systemctl status cron

Cron no ejecuta si no tiene permisos:

Ventana de terminal
chmod +x script.sh

Usa rutas absolutas siempre:

Ventana de terminal
/home/user/script.sh

Verifica:

Ventana de terminal
systemctl status backup.timer

Ventana de terminal
>> /var/log/script.log 2>&1

Usa flock:

Ventana de terminal
flock -n /tmp/script.lock /usr/local/bin/script.sh

3. 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

Ubicaciones recomendadas:

  • /usr/local/bin
  • /opt/scripts

Ejemplo simple:

Ventana de terminal
grep CRON /var/log/syslog

  • No ejecutes como root si no es necesario.
  • Valida scripts antes de programar.

Guarda scripts en Git:

Ventana de terminal
git init /opt/scripts

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.