Programacion de Tareas

Capítulo 2

1. Introducción a los Trabajos Diferidos

En Linux, los trabajos diferidos son como una lista de tareas pendientes con temporizador. El sistema mantiene estas tareas y las ejecuta en el momento especificado.

  • Tareas diferidas: Como poner una alarma para más tarde
  • Tareas recurrentes de usuario: Como configurar un recordatorio diario
  • Tareas recurrentes del sistema: Como programar el mantenimiento automático

2. Comando at y sus Opciones

El comando at es la herramienta principal para programar trabajos diferidos:

  • at -l o atq: Lista todos los trabajos pendientes
  • at -c [número]: Muestra el contenido del trabajo especificado
  • at -d [número] o atrm [número]: Elimina un trabajo programado
  • at -m: Envía un email cuando el trabajo se complete

Ejemplo Práctico Completo:

  • Programar un trabajo para ejecutarse en 5 minutos

    at now + 5 minutes
    echo "Ejecutando tarea programada" > /home/student/task_output.txt
  • Verificar los trabajos pendientes

    atq
  • Ver el contenido del trabajo número 1

    at -c 1

3. Gestión de Trabajos con Crontab

El comando crontab gestiona las tareas recurrentes con las siguientes opciones:

  • crontab -e: Edita el archivo de tareas programadas
  • crontab -l: Lista todas las tareas programadas
  • crontab -r: Elimina todas las tareas programadas
  • crontab -u [usuario]: Modifica el crontab de otro usuario (requiere privilegios)

Ejemplo Práctico con Crontab:

  • Editar el archivo de crontab

    crontab -e
  • Programar una tarea que se ejecuta todos los días a las 8:00 AM

    0 8 * * * /usr/local/bin/backup.sh

    El formato 0 8 * * * significa:

    • 0: En el minuto 0 (inicio de la hora)
    • 8: A las 8 AM
    • *: Todos los días del mes
    • *: Todos los meses
    • *: Todos los días de la semana
  • Programar una tarea que se ejecuta los lunes, miércoles y viernes a las 8:00 AM

    0 8 * * 1,3,5 /usr/local/bin/backup_diario.sh

    El formato 0 8 * * 1,3,5 significa:

    • 0: En el minuto 0 (inicio de la hora)
    • 8: A las 8 AM
    • *: Cualquier día del mes
    • *: Cualquier mes
    • 1,3,5: Solo los lunes(1), miércoles(3) y viernes(5)
  • Verificar las tareas programadas

    crontab -l
  • Eliminar todas las tareas

    crontab -r

4. Systemd-tmpfiles y sus Comandos

El servicio systemd-tmpfiles es una herramienta que administra archivos y directorios temporales en sistemas Linux. Su función principal es gestionar la creación, limpieza y mantenimiento de archivos temporales del sistema. Este servicio cumple tres funciones principales:

  • Crear y mantener archivos y directorios temporales
  • Limpiar archivos antiguos basándose en reglas predefinidas
  • Asegurar permisos y propiedades correctas en directorios temporales

Las opciones principales son:

  • systemd-tmpfiles --create: Crea archivos y directorios
  • systemd-tmpfiles --clean: Limpia archivos antiguos
  • systemd-tmpfiles --remove: Elimina archivos especificados
  • systemd-tmpfiles --boot: Ejecuta todas las operaciones de arranque

Ejemplo de Configuración para Limpieza Automática:

  • Crear un nuevo archivo de configuración

    vim /etc/tmpfiles.d/custom.conf
  • Agregar regla de limpieza en el archivo custom.conf

  • Tipo(d) - Ruta - Permisos - Usuario - Grupo - Edad

    d /var/tmp/test 1777 root root 10d

    Esta regla significa:

    • d: Crea un directorio si no existe
    • /var/tmp/test: Ruta del directorio a gestionar
    • 1777: Permisos (todos pueden leer, escribir y ejecutar)
    • root root: El propietario y grupo del directorio
    • 10d: Eliminar archivos más antiguos de 10 días
  • Aplicar la configuración inmediatamente

    sudo systemd-tmpfiles --create /etc/tmpfiles.d/custom.conf
  • Verificar que la configuración se aplicó correctamente

    ls -la /var/tmp/test
  • Para probar la limpieza automática

    systemd-tmpfiles --clean /etc/tmpfiles.d/custom.conf

    Este comando eliminará los archivos más antiguos de 10 días

Tipos de reglas más comunes:

  • d: Crear/limpiar directorio
  • f: Crear/limpiar archivo regular
  • D: Limpiar directorio recursivamente
  • x: Eliminar ruta si existe
  • L: Crear enlace simbólico

Por ejemplo, cuando abres:

vim /etc/tmpfiles.d/custom.conf

Dentro del archivo podrías tener múltiples reglas como estas:

  • Crear y limpiar un directorio
d /var/tmp/test 1777 root root 10d
  • Crear un archivo regular
f /var/tmp/info.txt 0644 root root -
  • Limpiar directorio recursivamente
D /var/tmp/logs 0755 root root 30d
  • Crear un enlace simbólico
L /var/tmp/link - - - - /path/to/target
  • Eliminar una ruta si existe
x /var/tmp/old-file

Cada línea en el archivo representa una regla diferente, y el primer carácter (d, f, D, x, L) determina qué tipo de acción se realizará sobre la ruta especificada.