Skip to content

Introducción

La automatización de tareas es clave en la administración de sistemas Linux. A través de herramientas como at, cron, anacron y temporizadores de systemd, los administradores pueden programar tareas diferidas o recurrentes para optimizar el mantenimiento, seguridad y rendimiento del sistema. Con estos mecanismos, se pueden ejecutar comandos en momentos específicos o asegurarse de que se cumplan incluso si el sistema estuvo apagado.

Objetivos

Proveer al usuario un conocimiento integral sobre:

  • Aprender a programar tareas diferidas con at.
  • Gestionar trabajos recurrentes con cron y crontab.
  • Utilizar anacron para ejecutar tareas tras reinicios del sistema.
  • Configurar temporizadores de systemd para automatizar servicios.
  • Optimizar la administración del sistema mediante la automatización de procesos.

Programación de Tareas Futuras en Linux

La programación de tareas permite ejecutar comandos o scripts en un momento específico sin intervención manual. Esto es útil para automatizar procesos como copias de seguridad, mantenimiento del sistema y ejecución de tareas administrativas.

Existen dos tipos principales de programación de tareas:

  • Tareas diferidas: Se ejecutan una sola vez en el futuro.
  • Tareas recurrentes: Se ejecutan periódicamente según un horario definido.

Linux ofrece varias herramientas para programar tareas, incluyendo at, cron y temporizadores de systemd.


Programación de Tareas Diferidas con at

El comando at permite ejecutar un trabajo en un momento específico sin necesidad de intervención manual. Es útil para programar tareas únicas, como apagar el sistema o ejecutar un script de mantenimiento.

Sintaxis básica

at TIMESPEC

Donde TIMESPEC define la fecha y hora de ejecución. Ejemplos:

at now + 5 min
at 14:30 tomorrow
at midnight
at teatime + 2 days

Después de ejecutar at, el sistema espera la entrada del usuario para definir los comandos a ejecutar. Para finalizar la entrada, se presiona Ctrl + D.

Ejemplo de programación de un script en 5 minutos

at now + 5 min < myscript

Esto ejecutará el contenido del archivo myscript en 5 minutos.


Gestión de Trabajos Programados con atq y atrm

  • Para listar los trabajos pendientes del usuario actual:

    atq
    

    Ejemplo de salida:

    28 Mon May 16 05:13:00 2025 a user  
    29 Tue May 17 16:00:00 2025 h user  
    30 Wed May 18 12:00:00 2025 a user  
    

    Cada línea representa un trabajo programado con su número de identificación, fecha de ejecución y usuario propietario.

  • Para eliminar un trabajo programado:

    atrm JOBNUMBER
    

    Ejemplo:

    atrm 28
    

    Esto elimina el trabajo con ID 28.


Programación de Tareas Recurrentes con cron

Introducción a cron y el Daemon crond

El daemon crond es el servicio encargado de ejecutar tareas recurrentes en Linux. Está habilitado por defecto en Red Hat Enterprise Linux y lee múltiples archivos de configuración para programar trabajos periódicos.

Cada usuario tiene un archivo personal de tareas recurrentes, que puede editar con:

crontab -e

Este archivo permite definir comandos que se ejecutarán en horarios específicos.


Gestión de Trabajos con crontab

El comando crontab permite administrar tareas recurrentes:

Comando Descripción
crontab -l Lista los trabajos programados del usuario actual.
crontab -r Elimina todos los trabajos del usuario actual.
crontab -e Edita los trabajos programados del usuario actual.
crontab filename Reemplaza todos los trabajos con los leídos desde filename.

Los usuarios con privilegios pueden gestionar trabajos de otros usuarios con:

crontab -u usuario -l

Formato de un Trabajo cron

Cada línea en el archivo crontab sigue el siguiente formato:

Minuto Hora DíaMes Mes DíaSemana Comando

Donde:

  • Minuto: 0-59
  • Hora: 0-23
  • Día del mes: 1-31
  • Mes: 1-12 (o abreviaturas como Jan, Feb)
  • Día de la semana: 0-7 (0 y 7 representan domingo)
  • Comando: El script o comando a ejecutar

Ejemplo

15 12 11 * Fri /usr/local/bin/script.sh

Este trabajo se ejecutará el día 11 de cada mes y todos los viernes a las 12:15.


Ejemplos de Trabajos cron

  • Ejecutar un respaldo anual el 3 de febrero a las 9:00

    0 9 3 2 * /usr/local/bin/yearly_backup
    
  • Enviar un mensaje cada cinco minutos entre las 9:00 y las 16:00, solo los viernes de julio

    */5 9-16 * Jul 5 echo "Chime"
    
  • Generar un reporte diario dos minutos antes de la medianoche, de lunes a viernes

    58 23 * * 1-5 /usr/local/bin/daily_report
    
  • Enviar un correo electrónico a las 9:00 de lunes a viernes

    0 9 * * 1-5 mutt -s "Checking in" developer@example.com % Hi there, just checking in.
    

Programación de Trabajos del Sistema con crontab

Archivos crontab del Sistema

Los administradores de sistemas suelen programar trabajos recurrentes utilizando archivos crontab del sistema en lugar de archivos de usuario. Estos archivos permiten definir tareas que se ejecutan con privilegios específicos y se encuentran en:

  • /etc/crontab: Archivo principal de programación de trabajos del sistema.
  • /etc/cron.d/: Directorio donde se almacenan archivos crontab personalizados.

Los archivos crontab del sistema incluyen un campo adicional para especificar el usuario que ejecutará el comando.

Ejemplo de entrada en /etc/crontab:

SHELL=/bin/bash  
PATH=/sbin:/bin:/usr/sbin:/usr/bin  
MAILTO=root  

# Minuto Hora DíaMes Mes DíaSemana Usuario Comando  
0 3 * * * root /usr/local/bin/system_backup.sh

Este trabajo ejecutará el script system_backup.sh todos los días a las 3:00 AM como usuario root.


Repositorios de Trabajos cron

El sistema crontab también incluye directorios específicos para ejecutar scripts en intervalos predefinidos:

  • /etc/cron.hourly/: Ejecuta scripts cada hora.
  • /etc/cron.daily/: Ejecuta scripts diariamente.
  • /etc/cron.weekly/: Ejecuta scripts semanalmente.
  • /etc/cron.monthly/: Ejecuta scripts mensualmente.

Para que un script en estos directorios se ejecute correctamente, debe tener permisos de ejecución:

chmod +x /etc/cron.daily/myscript.sh

Ejecución de Trabajos con anacron

El comando anacron garantiza que los trabajos programados se ejecuten incluso si el sistema estuvo apagado o hibernado. Su configuración se encuentra en /etc/anacrontab, con la siguiente sintaxis:

Periodo en días  Retraso en minutos  Identificador del trabajo  Comando

Ejemplo de entrada en /etc/anacrontab:

1 10 daily_backup /usr/local/bin/daily_backup.sh

Esto ejecutará daily_backup.sh una vez al día, con un retraso de 10 minutos tras el arranque del sistema.


Programación de Trabajos con Temporizadores systemd

Los temporizadores systemd permiten activar unidades de servicio en horarios específicos. Un ejemplo es el temporizador sysstat-collect.timer, que recopila estadísticas del sistema cada 10 minutos:

[Unit]  
Description=Run system activity accounting tool every 10 minutes  

[Timer]  
OnCalendar=*:00/10  

[Install]  
WantedBy=sysstat.service

Para activar un temporizador, se usa:

systemctl enable --now sysstat-collect.timer

Esto ejecutará la unidad sysstat-collect.service cada 10 minutos.

Conclusión

La programación de tareas en Linux permite automatizar procesos clave, asegurando la eficiencia del sistema. Mediante at, cron, anacron y temporizadores de systemd, los administradores pueden ejecutar comandos en momentos específicos y mantener tareas recurrentes sin intervención manual. Dominar estas herramientas es esencial para garantizar la estabilidad y rendimiento del sistema.