Close-up of a computer monitor displaying cyber security data and code, indicative of system hacking or programming.

Mantenimiento en Linux: Script de Limpieza con Bash y Cron


La administración de servidores requiere, ante todo, previsibilidad. Uno de los problemas más comunes (y evitables) en la gestión de infraestructura es el llenado del disco debido a archivos antiguos, backups acumulados o logs que no rotan adecuadamente. En este post comento como logre la automatización de limpieza con bash de forma ordenada y segura.

Si bien existen herramientas como logrotate, a veces necesitamos soluciones personalizadas para directorios específicos donde se almacenan volcados de base de datos o reportes generados por aplicaciones legacy.

El Problema

Teníamos directorios críticos donde se acumulaban archivos diariamente. Realizar una limpieza manual no solo es tedioso, sino que conlleva riesgos humanos (como borrar la carpeta equivocada por accidente). La regla es simple: si es una tarea repetitiva, debe ser automatizada.

La Solución: Bash + Find

Desarrollé un script que audita las rutas definidas y elimina el contenido obsoleto.

Vamos al detalle…

El corazón de este script reside en el comando find. Analicemos la línea clave:

find "$DIR" -mindepth 1 -type d -mtime +90 -print -exec rm -rf {} +

Para asegurar que el script sea seguro y eficiente, utilicé los siguientes parámetros:

  1. Seguridad ante todo (-mindepth 1): Esta es quizás la bandera más importante. Asegura que el comando find procese el contenido dentro del directorio, pero jamás el directorio padre en sí mismo. Esto evita que, por un error de cálculo, eliminemos el punto de montaje o la carpeta raíz del backup.
  2. Filtrado por tiempo (-mtime +90): Buscamos archivos o directorios que no hayan sido modificados en los últimos 90 días (3 meses). Este umbral es totalmente configurable según la política de retención de la empresa.
  3. Tipo de archivo (-type d): En este caso específico, me interesaba limpiar estructuras de directorios antiguas, pero esto puede cambiarse a -type f si solo buscamos archivos sueltos.
  4. Ejecución eficiente (-exec ... +): Al terminar la línea con + en lugar de \;, find pasa múltiples resultados al comando rm en una sola ejecución, lo que es mucho más eficiente en términos de I/O que ejecutar un rm por cada archivo encontrado.

Auditoría y Automatización

Un script de mantenimiento “silencioso” es peligroso. Por eso, el script redirige la salida estándar y de error (2>&1) a un archivo de log (/var/log/limpieza.log). Esto permite revisar rápidamente qué se eliminó y cuándo.

Finalmente, la ejecución se programa en el Crontab para correr en una ventana de bajo tráfico (05:00 AM):

00 05 * * * /bin/bash /usr/local/bin/borrado-cron.sh

Conclusión

Pequeñas automatizaciones como esta son las que garantizan la estabilidad a largo plazo de un servidor. Al delegar la limpieza al sistema, liberamos tiempo para tareas de arquitectura y optimización.