Saltar al contenido principal

12. Casos Prácticos

Introducción

Los casos prácticos son una excelente manera de aplicar lo aprendido y entender cómo se utilizan los comandos y scripts en situaciones del mundo real. A continuación, se presentan varios escenarios que te ayudarán a poner en práctica tus conocimientos de Bash y la automatización.

Ejercicio 1: Despliegue de Aplicación Web

Descripción del Caso

Tu empresa tiene una aplicación web basada en un stack LAMP (Linux, Apache, MySQL, PHP). Cada vez que hay una nueva versión del código, debes desplegarla en el servidor de producción. Este proceso incluye:

  1. Detener el servidor web para evitar inconsistencias mientras se despliega la nueva versión.
  2. Hacer una copia de seguridad de los archivos actuales y la base de datos.
  3. Obtener la última versión del código desde el repositorio.
  4. Instalar dependencias.
  5. Configurar permisos y variables de entorno.
  6. Reiniciar el servidor web.

Ejercicio

1.1 Crea un script Bash que automatice el proceso de despliegue de la aplicación web descrito anteriormente.

Ejercicio 2: Respaldo y Limpieza de Base de Datos

Descripción del Caso

Necesitas realizar respaldos regulares de una base de datos MySQL y limpiar los respaldos antiguos para ahorrar espacio en disco.

Ejercicio

2.1 Crea un script Bash que realice un respaldo de una base de datos MySQL, lo comprima y elimine los respaldos más antiguos de 30 días.

Ejercicio 3: Limpieza de Archivos Temporales

Descripción del Caso

Los archivos temporales y logs antiguos pueden llenar el disco con el tiempo. Necesitas automatizar la limpieza de estos archivos.

Ejercicio

3.1 Crea un script Bash que limpie archivos temporales y logs que tengan más de 10 días de antigüedad.

Ejercicio 4: Monitorización de Logs en Tiempo Real

Descripción del Caso

Quieres monitorear los logs del sistema en tiempo real y recibir una notificación cuando se detecte la palabra "ERROR".

Ejercicio

4.1 Crea un script Bash que monitoree los logs del sistema en tiempo real y envíe una notificación por correo electrónico cuando se detecte la palabra "ERROR".

Ejercicio 5: Automatización de Tareas con Cron

Descripción del Caso

Necesitas programar varias tareas automáticas, como limpiar archivos temporales, respaldar bases de datos y actualizar aplicaciones.

Ejercicio

5.1 Crea las entradas necesarias en el crontab para realizar las siguientes tareas:

  1. Limpiar archivos temporales diariamente a la medianoche.
  2. Respaldar la base de datos cada domingo a las 3 AM.
  3. Actualizar una aplicación web cada día a las 2 AM.

Soluciones de los Casos Prácticos

Ejercicio 1: Despliegue de Aplicación Web

1.1 Crea un script Bash que automatice el proceso de despliegue de la aplicación web descrito anteriormente.

  • Solución:
    #!/bin/bash

    # Ruta de la aplicación
    APP_DIR="/var/www/tu_aplicacion"

    # Detener el servidor web
    echo "Deteniendo el servidor web..."
    systemctl stop apache2

    # Hacer copia de seguridad de los archivos y base de datos
    echo "Haciendo copia de seguridad..."
    tar -czvf $APP_DIR/backup_$(date +%Y%m%d%H%M).tar.gz $APP_DIR
    mysqldump -u usuario -pcontraseña basedatos > $APP_DIR/backup_db_$(date +%Y%m%d%H%M).sql

    # Obtener la nueva versión del código
    echo "Obteniendo la nueva versión del código..."
    cd $APP_DIR
    git pull origin main

    # Instalar dependencias (ejemplo para PHP Composer)
    echo "Instalando dependencias..."
    composer install

    # Configurar permisos y variables de entorno
    echo "Configurando permisos y variables de entorno..."
    chown -R www-data:www-data $APP_DIR
    chmod -R 755 $APP_DIR
    cp $APP_DIR/.env.example $APP_DIR/.env
    php artisan key:generate

    # Reiniciar el servidor web
    echo "Reiniciando el servidor web..."
    systemctl start apache2

    echo "Despliegue completado con éxito."

Ejercicio 2: Respaldo y Limpieza de Base de Datos

2.1 Crea un script Bash que realice un respaldo de una base de datos MySQL, lo comprima y elimine los respaldos más antiguos de 30 días.

  • Solución:
    #!/bin/bash
    # Variables
    fecha=$(date +%Y%m%d%H%M)
    backup_dir="/ruta/a/respaldo"
    db_user="usuario"
    db_password="contraseña"
    db_name="basedatos"
    # Crear respaldo
    mysqldump -u $db_user -p$db_password $db_name | gzip > $backup_dir/respaldo_$fecha.sql.gz
    # Eliminar respaldos antiguos
    find $backup_dir -type f -mtime +30 -name '*.gz' -exec rm {} \;

Ejercicio 3: Limpieza de Archivos Temporales

3.1 Crea un script Bash que limpie archivos temporales y logs que tengan más de 10 días de antigüedad.

  • Solución
    #!/bin/bash
    # Limpiar archivos temporales
    find /tmp -type f -atime +10 -delete
    # Limpiar logs antiguos
    find /var/log -type f -name '*.log' -mtime +10 -delete

Ejercicio 4: Monitorización de Logs en Tiempo Real

4.1 Crea un script Bash que monitoree los logs del sistema en tiempo real y envíe una notificación por correo electrónico cuando se detecte la palabra "ERROR".

  • Solución
    #!/bin/bash
    tail -f /var/log/syslog | grep --line-buffered "ERROR" | while read line
    do
    echo "Error detectado: $line" | mail -s "Error en el sistema" destinatario@ejemplo.com
    done

Ejercicio 5: Automatización de Tareas con Cron

5.1 Crea las entradas necesarias en el crontab para realizar las siguientes tareas:

  1. Limpiar archivos temporales diariamente a la medianoche.
  2. Respaldar la base de datos cada domingo a las 3 AM.
  3. Actualizar una aplicación web cada día a las 2 AM.
  • Solución
    # Editar crontab con:
    crontab -e
    # Añadir las siguientes líneas:
    0 0 * * * /ruta/a/tu_script_limpieza.sh
    0 3 * * 0 /ruta/a/tu_script_respaldo.sh
    0 2 * * * /ruta/a/tu_script_actualizacion.sh