Laboratorio 3: Administración de Procesos
Unidad: 5 - Administración de Procesos y Servicios
Duración Estimada: 90 minutos
Dificultad: Intermedio
Objetivos
- Monitorear procesos del sistema
- Gestionar procesos (iniciar, detener, pausar)
- Entender systemd y servicios
- Automatizar tareas con cron
Requisitos Previos
- Ubuntu del Lab 1 corriendo
- Acceso SSH como “alumno”
- Permisos sudo
Pasos del Laboratorio
Paso 1: Monitoreo Básico de Procesos (20 min)
BASH
# Ver procesos activos
ps aux # Todos los procesos
# Ver solo tus procesos
ps
# Más información con tree
ps auxf # Árbol de procesos
# Usar top en tiempo real
top # Presiona 'q' para salir
# Usar htop (más amigable)
sudo apt update && sudo apt install -y htop
htop # Presiona 'q' para salir
# Ver procesos de usuario específico
ps -u alumnoPaso 2: Gestión de Procesos - Prioridad y Señales (25 min)
BASH
# Crear proceso larga duración
sleep 3600 & # Ejecuta en background por 1 hora
# Anota el PID mostrado (ej: [1] 12345)
# Ver procesos en background
jobs
# Ver información del proceso
ps -p 12345 # Reemplaza 12345 con tu PID
# Traer a foreground
fg # Requiere Ctrl+Z para pausar primero
# Presiona Ctrl+Z para pausar
# Continuar en background
bg
# Matar proceso de forma suave
kill -15 12345 # SIGTERM
# Matar proceso de forma forzada (si es necesario)
kill -9 12345 # SIGKILL
# Cambiar prioridad de proceso
sleep 3600 &
# PID será diferente
# Cambiar prioridad (valor más alto = menos prioridad)
renice +10 -p [PID]Paso 3: Systemd y Servicios (20 min)
BASH
# Ver servicios disponibles
systemctl list-units --type=service
# Ver estado de servicio específico
systemctl status ssh
systemctl status networking
# Iniciar un servicio
sudo systemctl start ssh
# Detener un servicio
sudo systemctl stop ssh
# Reiniciar un servicio
sudo systemctl restart ssh
# Habilitar servicio al inicio
sudo systemctl enable ssh
# Deshabilitar servicio al inicio
sudo systemctl disable ssh
# Ver si está habilitado
systemctl is-enabled ssh
# Ver log en tiempo real
sudo journalctl -u ssh -f # Presiona Ctrl+C para salirPaso 4: Crear Servicio Personalizado (25 min)
BASH
# Crear script simple
cat > /home/alumno/mi_servicio.sh << 'EOF'
#!/bin/bash
while true; do
echo "$(date): Servicio ejecutándose" >> /tmp/mi_servicio.log
sleep 5
done
EOF
# Hacer ejecutable
chmod +x /home/alumno/mi_servicio.sh
# Crear archivo de systemd
sudo cat > /etc/systemd/system/mi-servicio.service << 'EOF'
[Unit]
Description=Mi Servicio de Prueba
After=network.target
[Service]
Type=simple
User=alumno
WorkingDirectory=/home/alumno
ExecStart=/home/alumno/mi_servicio.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# Recargar systemd
sudo systemctl daemon-reload
# Iniciar servicio
sudo systemctl start mi-servicio
# Verificar estado
sudo systemctl status mi-servicio
# Ver log
tail -f /tmp/mi_servicio.log # Ctrl+C para salir
# Habilitar al inicio
sudo systemctl enable mi-servicio
# Detener servicio
sudo systemctl stop mi-servicioPaso 5: Tareas Programadas con Cron (20 min)
BASH
# Editar tabla cron del usuario actual
crontab -e
# En el editor, agrega esta línea:
# Ejecutar tarea cada 5 minutos
*/5 * * * * /home/alumno/tarea.sh
# Ver tabla cron
crontab -l
# Crear script para ejecutar
cat > /home/alumno/tarea.sh << 'EOF'
#!/bin/bash
echo "Tarea ejecutada a las $(date)" >> /tmp/cron_log.txt
EOF
chmod +x /home/alumno/tarea.sh
# Agregar a cron
(crontab -l 2>/dev/null; echo "*/5 * * * * /home/alumno/tarea.sh") | crontab -
# Verificar que se está ejecutando
sleep 305 # Espera 5+ minutos
cat /tmp/cron_log.txt
# Ver logs de cron
grep CRON /var/log/syslog | tail -10
# Remover tarea
crontab -rPaso 6: At - Tareas Puntuales (10 min)
BASH
# Instalar at (si no está)
sudo apt install -y at
# Ver si servicio está corriendo
sudo systemctl status atd
# Programar tarea para dentro de 2 minutos
echo "echo 'Tarea at ejecutada' >> /tmp/at_log.txt" | at now + 2 minutes
# Ver tareas programadas
atq
# Ver detalles de tarea
at -l
# Remover tarea (si es necesario)
# atrm [ID]Ejercicios de Práctica Independiente
Ejercicio A: Monitoreo y Gestión (30 min)
- Ejecuta
sleep 7200en background - Usa
ps,jobs, ytoppara verificar su ejecución - Pausa el proceso con Ctrl+Z
- Reanúdalo con
bg - Mata el proceso con
kill - Verifica que terminó
Ejercicio B: Servicio de Monitorización (30 min)
- Crea un script que registre la hora cada 10 segundos
- Crea un servicio systemd para ese script
- Inicia el servicio
- Verifica en el log que funciona
- Habilita al inicio
- Reinicia la VM y verifica que continúa
Ejercicio C: Cron Schedule (20 min)
- Crear script que registre el uso de CPU
- Programar con cron para ejecutarse cada hora
- Verificar en logs que se ejecutó
- Cambiar a cada 15 minutos
- Después de 15 min, remover
Conceptos Clave
Señales Comunes: - SIGHUP (1): Colgar - SIGTERM (15): Terminar (default) - SIGKILL (9): Matar (no se puede ignorar) - SIGSTOP (19): Pausar - SIGCONT (18): Continuar
Formato Cron:
* * * * * comando
│ │ │ │ │
│ │ │ │ └─ Día semana (0-6, 0=Domingo)
│ │ │ └─── Mes (1-12)
│ │ └───── Día (1-31)
│ └─────── Hora (0-23)
└───────── Minuto (0-59)