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:
- Detener el servidor web para evitar inconsistencias mientras se despliega la nueva versión.
- Hacer una copia de seguridad de los archivos actuales y la base de datos.
- Obtener la última versión del código desde el repositorio.
- Instalar dependencias.
- Configurar permisos y variables de entorno.
- 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:
- Limpiar archivos temporales diariamente a la medianoche.
- Respaldar la base de datos cada domingo a las 3 AM.
- 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:
- Limpiar archivos temporales diariamente a la medianoche.
- Respaldar la base de datos cada domingo a las 3 AM.
- 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