Automatización de tareas: cron, at, systemd.timer

Introducción

Linux ofrece varias herramientas para ejecutar tareas de forma automática en un momento determinado o de forma periódica: cron para tareas recurrentes, at para tareas puntuales programadas y systemd.timer como alternativa moderna a cron.

cron — Tareas periódicas

El demonio cron ejecuta comandos de forma periódica según la configuración definida en los crontabs.

Editar el crontab del usuario actual:


$ crontab -e     # editar
$ crontab -l     # listar
$ crontab -r     # eliminar todo el crontab
          

Formato de una línea de crontab:


# minuto  hora  día_mes  mes  día_semana  comando
     *      *      *      *       *       /ruta/al/script.sh

  0     2     *    *    *    /usr/local/bin/backup.sh     # cada día a las 2:00
  */5   *     *    *    *    /usr/local/bin/check.sh      # cada 5 minutos
  0     8     *    *    1    /usr/local/bin/report.sh     # lunes a las 8:00
  30    23    1    *    *    /usr/local/bin/monthly.sh    # día 1 de cada mes a las 23:30
          

Campos y valores:

  • minuto: 0-59
  • hora: 0-23
  • día del mes: 1-31
  • mes: 1-12
  • día de la semana: 0-7 (0 y 7 = domingo)
  • * → cualquier valor
  • */n → cada n unidades
  • a,b → valores concretos
  • a-b → rango

Atajos predefinidos:


@reboot    # al arrancar el sistema
@hourly    # cada hora
@daily     # cada día a medianoche
@weekly    # cada domingo a medianoche
@monthly   # el día 1 de cada mes a medianoche
          

Crontab del sistema:

Los archivos en /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.weekly/ y /etc/cron.monthly/ permiten configurar tareas a nivel de sistema. El crontab global del sistema está en /etc/crontab e incluye una columna adicional con el usuario que ejecuta el comando.


# /etc/crontab
0 2 * * * root /usr/local/bin/backup.sh
          

at — Tarea puntual programada

Permite ejecutar un comando una sola vez en un momento futuro específico. Es ideal para tareas que no se repiten.

Uso básico:


$ at 15:30                    # ejecutar a las 15:30 de hoy
$ at 15:30 tomorrow           # mañana a las 15:30
$ at 15:30 Jul 20             # el 20 de julio a las 15:30
$ at now + 2 hours            # dentro de 2 horas
$ at now + 30 minutes
          

Tras escribir la hora, se abre un prompt donde se introduce el comando. Se termina con Ctrl+D.


$ at now + 1 hour
at> /usr/local/bin/backup.sh
at> <Ctrl+D>
job 3 at Mon Jan 01 16:00:00 2025
          

Gestión de trabajos at:


$ atq          # listar trabajos pendientes
$ atrm 3       # eliminar el trabajo número 3
$ at -c 3      # ver el contenido del trabajo 3
          

Control de acceso:

  • /etc/at.allow → usuarios que pueden usar at
  • /etc/at.deny → usuarios que no pueden usar at

Comparativa: cron vs at vs systemd.timer


Herramienta     Uso principal                       Ventaja
cron            Tareas periódicas (recurrentes)     Simple, universal
at              Tarea puntual futura                Ejecución única
systemd.timer   Tareas periódicas o puntuales       Integrado en systemd, logs con journalctl, más opciones
          

Para nuevas instalaciones modernas se recomienda usar systemd.timer por su mejor integración con el sistema (logs, dependencias, control preciso). cron sigue siendo válido y está presente en todos los sistemas.

Automatizar tareas es esencial en la administración de sistemas: backups, informes, limpieza de logs, etc.

Análisis de logs: /var/log/ y journalctl

Índice de la sección

Índice del curso