Skip to content

Laboratorio cron, at, systemd

Objetivos

  • Programar tareas diferidas con at para ejecutar comandos en momentos específicos.
  • Configurar trabajos recurrentes con crontab para automatizar procesos del usuario.
  • Implementar trabajos del sistema con cron y temporizadores systemd.
  • Verificar la ejecución de tareas programadas y gestionar su administración.
  • Optimizar la automatización de procesos para mejorar la eficiencia del sistema.

Entorno Inicial

  • Usuario: student
  • Máquina: servera
  • Contraseña inicial: student
  • Herramientas utilizadas: Shell Bash y utilidades básicas de Linux.

Pasos del Laboratorio

Prerequisitos

  1. Inicio de sesión
    • Inicia sesión en la máquina servera desde bastion como el usuario student utilizando la llave privada proporcionada:
      ssh student-#-servera
      

Parte 1: Programación de Trabajos con at

  1. Instalar comando at

    • Instala el paquete utilizando dnf:

      sudo dnf install -y at
      

    • Usa systemctl para habilitar el servicio:

      sudo systemctl enable --now atd
      

  2. Programar un trabajo para ejecutarse en dos minutos

    • Usa at para programar la ejecución del comando date, guardando la salida en /home/student/myjob.txt:
      echo "date >> /home/student/myjob.txt" | at now +2 min
      
    • Salida esperada:
      warning: commands will be executed using /bin/sh  
      job 1 at Thu Feb 16 18:51:16 2023
      
  3. Verificar los trabajos programados

    • Usa atq para listar los trabajos pendientes:
      atq
      
    • Ejemplo de salida:
      1 Thu Feb 16 18:51:16 2023 a student
      
  4. Monitorear la cola de trabajos en tiempo real

    • Usa watch atq para observar la cola de trabajos diferidos:
      watch atq
      
    • Presiona Ctrl + C para salir del comando después de que el trabajo se haya ejecutado.
  5. Verificar la ejecución del trabajo programado

    • Usa cat para comprobar que la salida del comando date se guardó correctamente en el archivo:
      cat /home/student/myjob.txt
      
    • Ejemplo de salida:
      Thu Feb 16 06:51:16 PM EDT 2023
      

Parte 2: Programación de Trabajos Recurrentes con crontab

  1. Determinar el rango de días para la ejecución del trabajo

    • Usa date para obtener la fecha y hora actuales:
      date
      
    • Ejemplo de salida:
      Wed Mar 15 07:33:01 PM EDT 2025
      
    • Usa date -d "last day" +%a para obtener el día anterior:
      date -d "last day" +%a
      
    • Ejemplo de salida:
      Tue
      
    • Usa date -d "next day" +%a para obtener el día siguiente:
      date -d "next day" +%a
      
    • Ejemplo de salida:
      Thu
      
  2. Programar un trabajo recurrente con crontab

    • Usa crontab -e para abrir el archivo de configuración de crontab:
      crontab -e
      
    • Agrega la siguiente línea para ejecutar date cada dos minutos, solo desde el día anterior hasta el día siguiente:
      */2 * * * Tue-Thu /usr/bin/date >> /home/student/my_first_cron_job.txt
      
    • Guarda los cambios (:wq).
  3. Verificar que el trabajo recurrente está instalado

    • Usa crontab -l para listar los trabajos programados:
      crontab -l
      
    • Ejemplo de salida:
      */2 * * * Tue-Thu /usr/bin/date >> /home/student/my_first_cron_job.txt
      
  4. Esperar la ejecución del trabajo recurrente

    • Usa while para esperar hasta que el archivo my_first_cron_job.txt sea creado:
      while ! test -f /home/student/my_first_cron_job.txt; do sleep 1s; done
      
  5. Verificar el contenido del archivo de salida

    • Usa cat para comprobar que el comando date se ejecutó correctamente:
      cat /home/student/my_first_cron_job.txt
      
    • Ejemplo de salida:
      Wed Mar 15 07:40:01 PM EDT 2025
      
  6. Eliminar el trabajo recurrente

    • Usa crontab -r para eliminar todos los trabajos programados del usuario student:
      crontab -r
      
    • Verifica que no haya trabajos programados:
      crontab -l
      
    • Salida esperada:
      no crontab for student
      

Parte 3: Programación de Trabajos del Sistema con cron y Temporizadores systemd

  1. Cambiar a superusuario

    • Usa el comando sudo -i para obtener privilegios de root:
      sudo -i
      
  2. Programar un trabajo del sistema recurrente para contar usuarios activos

    • Usa vim para crear el script /etc/cron.daily/usercount:
      vim /etc/cron.daily/usercount
      
    • Agrega el siguiente contenido:
      #!/bin/bash  
      USERCOUNT=$(w -h | wc -l)  
      logger "There are currently ${USERCOUNT} active users"
      
    • Guarda los cambios (:wq).
  3. Hacer el script ejecutable

    • Usa chmod para otorgar permisos de ejecución:
      chmod +x /etc/cron.daily/usercount
      
  4. Instalar el paquete sysstat

    • Usa dnf para instalar sysstat, que recopila datos de actividad del sistema:
      dnf install sysstat -y
      
  5. Modificar la unidad de temporizador systemd para recopilar datos cada dos minutos

    • Copia el archivo de configuración original:
      cp /usr/lib/systemd/system/sysstat-collect.timer /etc/systemd/system/sysstat-collect.timer
      
    • Usa vim para editar /etc/systemd/system/sysstat-collect.timer:
      vim /etc/systemd/system/sysstat-collect.timer
      
    • Reemplaza todas las apariciones de 10 minutes con 2 minutes.
    • Guarda los cambios (:wq).
  6. Recargar la configuración de systemd

    • Usa systemctl para aplicar los cambios:
      systemctl daemon-reload
      
  7. Activar el temporizador sysstat-collect.timer

    • Usa systemctl para habilitar y ejecutar el temporizador:
      systemctl enable --now sysstat-collect.timer
      
  8. Esperar la creación del archivo de actividad del sistema

    • Usa un bucle while para verificar la existencia del archivo en /var/log/sa:
      while [ $(ls /var/log/sa | wc -l) -eq 0 ]; do sleep 1s; done
      
  9. Verificar que el archivo se ha actualizado en los últimos dos minutos

    • Usa ls -l para comprobar la fecha de modificación:
      ls -l /var/log/sa
      
    • Usa date para comparar la hora actual con la del archivo:
      date
      
  10. Salir de servera y volver al bastion

    • Salir de la sesión remota:
      exit
      

Resultados Esperados

  • Los participantes podrán programar tareas únicas con at y gestionar su ejecución.
  • Se configurarán trabajos recurrentes con crontab, asegurando la automatización de procesos.
  • Se establecerán trabajos del sistema con cron y temporizadores systemd para tareas administrativas.
  • Se aplicarán técnicas de monitoreo y gestión de trabajos programados.
  • Se comprenderá la importancia de la automatización en la administración de sistemas Linux.