#!/bin/bash # Script de limpieza de logs # Ejecuta a las 3:00 AM set -e echo "[$(date '+%Y-%m-%d %H:%M:%S')] Iniciando limpieza de logs..." # Directorio de logs LOGS_DIR="/var/www/html/logs" if [ ! -d "$LOGS_DIR" ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ Directorio de logs no encontrado: $LOGS_DIR" exit 0 fi # Contar archivos antes de limpiar BEFORE_COUNT=$(find "$LOGS_DIR" -name "*.log" -type f | wc -l) echo "[$(date '+%Y-%m-%d %H:%M:%S')] Archivos de log encontrados: $BEFORE_COUNT" # Eliminar logs más antiguos de 30 días echo "[$(date '+%Y-%m-%d %H:%M:%S')] Eliminando logs antiguos (>30 días)..." find "$LOGS_DIR" -name "*.log" -type f -mtime +30 -delete # Comprimir logs entre 7-30 días echo "[$(date '+%Y-%m-%d %H:%M:%S')] Comprimiendo logs antiguos (7-30 días)..." find "$LOGS_DIR" -name "*.log" -type f -mtime +7 -mtime -30 -exec gzip {} \; 2>/dev/null || true # Limpiar logs .gz más antiguos de 30 días find "$LOGS_DIR" -name "*.log.gz" -type f -mtime +30 -delete # Contar archivos después de limpiar AFTER_COUNT=$(find "$LOGS_DIR" -name "*.log" -o -name "*.log.gz" -type f | wc -l) echo "[$(date '+%Y-%m-%d %H:%M:%S')] Archivos de log restantes: $AFTER_COUNT" # Calcular espacio liberado SPACE_USED=$(du -sh "$LOGS_DIR" | cut -f1) echo "[$(date '+%Y-%m-%d %H:%M:%S')] Espacio usado por logs: $SPACE_USED" # Truncar logs muy grandes (>100MB) echo "[$(date '+%Y-%m-%d %H:%M:%S')] Truncando logs muy grandes..." find "$LOGS_DIR" -name "*.log" -type f -size +100M -exec sh -c 'echo "Log truncado el $(date)" > "$1"' _ {} \; echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ Limpieza de logs completada"