Scripts de mantenimiento nocturno en servidores linux

Scripts de Mantenimiento Nocturno en Servidores Linux

Cuando montamos la infraestructura de La MIX Radio, nos dimos cuenta de que los scripts de mantenimiento nocturno en servidores Linux son la única forma de dormir tranquilos.
No hay nada peor que despertar a las cuatro de la mañana porque un log llenó el disco.
La automatización no es un lujo, sino una necesidad cuando operas servicios que deben estar activos las 24 horas del día.

El riesgo de ignorar la limpieza automática

Muchos administradores cometen el error de entrar manualmente al servidor una vez por semana para borrar temporales o reiniciar servicios.
El problema es que el mantenimiento humano es inconsistente y propenso a olvidos. En nuestra experiencia, un servidor que no se limpia automáticamente empieza a degradar su rendimiento sin previo aviso.

Si no ejecutamos tareas de purga y optimización, los archivos de registro crecen desmedidamente.
Esto provoca que procesos críticos, como el stream de Icecast, empiecen a fallar por falta de espacio en el sistema de archivos.
Además, las actualizaciones pendientes de seguridad pueden generar vulnerabilidades que un simple reinicio programado resolvería.
En la práctica, el síntoma más común es un servidor que se vuelve lento o que deja de responder a peticiones SSH justo en el momento de mayor audiencia.

Lo que necesitamos para empezar

Para implementar este sistema de limpieza, no hace falta software complejo. Solo necesitamos que el servidor esté operativo y que tengamos acceso total.
Estos son los requisitos básicos que usamos en nuestro homelab Proxmox:

  • Distribución Linux basada en Debian o Ubuntu (en nuestro caso, instalada en contenedores LXC).
  • Privilegios de superusuario (root) o configuración de sudoers.
  • Acceso a la herramienta cron para la programación de tareas.
  • Un editor de texto básico como nano o vim instalado en la terminal.

Cómo configuramos nuestros scripts de mantenimiento

La base de nuestra estrategia consiste en crear un script maestro que se ejecute a una hora de bajo tráfico, generalmente a las 3:00 AM.
Este script no hace una sola cosa, sino que llama a varias funciones de limpieza y verificación.
Lo primero que hicimos fue crear un directorio específico en /home/lamix/scripts para mantener el orden.

Para empezar, creamos el archivo de mantenimiento.
El siguiente código se encarga de limpiar los logs antiguos y vaciar la caché de paquetes de APT, lo que evita que el almacenamiento se sature.

#!/bin/bash
# Script de mantenimiento nocturno para servidores de radio
# Ejecutado en VM 111 y CT 101

# Definimos la ruta de logs para el historial del script
LOG_FILE="/var/log/mantenimiento_nocturno.log"

echo "Iniciando mantenimiento: $(date)" >> $LOG_FILE

# Limpieza de caché de paquetes APT

apt-get clean

apt-get autoremove -y >> $LOG_FILE 2>&1

# Borrado de archivos temporales con más de 7 días
find /tmp -type f -mtime +7 -exec rm -f {
} \;

echo "Limpieza de temporales completada" >> $LOG_FILE

Una vez resuelta la limpieza de disco, el siguiente paso es asegurar que los servicios críticos estén respondiendo. En La MIX Radio, si Icecast se detiene, la radio queda muda. Por eso, añadimos una verificación de procesos que reinicie el servicio solo si este ha dejado de funcionar.

Este bloque de código verifica si el proceso de Icecast está activo y, en caso negativo, lo levanta automáticamente antes de registrar el error.

# Verificar si Icecast está corriendo
if ! p
grep -x "icecastexp" > /dev/null
then

echo "Icecast caído. Reiniciando servicio..." >> $LOG_FILE

systemctl restart icecast2
else

echo "Icecast funcionando correctamente" >> $LOG_FILE
fi

Después de gestionar los servicios, necesitamos que el sistema nos informe sobre el estado de la salud del servidor. No revisamos el log manualmente cada día, así que integramos una llamada simple a un bot de Telegram. Esto nos permite saber que los scripts de mantenimiento nocturno en servidores Linux se ejecutaron sin errores mientras dormíamos.

Usamos un comando curl básico para enviar la notificación al chat de administración del homelab.

# Notificación simple a Telegram vía API
TOKEN="tu_token_de_bot"
CHAT_ID="tu_chat_id"
MESSAGE="Mantenimiento nocturno completado en VM 111. Sistema estable."

curl -s -X POST https://api.telegram.org/bot$TOKEN/sendMessage \
-d chat_id=$CHAT_ID \
-d text="$MESSAGE"

Finalmente, para que todo esto ocurra sin nuestra intervención, programamos la tarea en el crontab del sistema. Esto asegura que el script se dispare exactamente a la hora acordada.

Ejecutamos el comando crontab -e y añadimos la siguiente línea al final del archivo:

# Ejecutar script de mantenimiento todos los días a las 03:00 AM
0 3 * * * /bin/bash /home/lamix/scripts/mantenimiento.sh

Implementar scripts de mantenimiento nocturno en servidores Linux nos permite delegar las tareas repetitivas a la máquina, dejando el tiempo de estudio para mejorar el código de Python o ajustar la calidad del audio en Icecast.

Errores que nos costaron tiempo

En el camino hacia la automatización, cometimos fallos que nos dejaron el servidor fuera de línea por horas. Estos fueron los tres más críticos:

Primero, olvidamos dar permisos de ejecución al archivo del script. El síntoma era que el cron reportaba un error pero no pasaba nada en el servidor. La solución fue ejecutar chmod +x /home/lamix/scripts/mantenimiento.sh.

Segundo, usamos rutas relativas en lugar de rutas absolutas dentro del script.
Esto causó que el comando rm no encontrara las carpetas temporales porque el cron no conoce el entorno del usuario. Lo solucionamos escribiendo siempre la ruta completa, como /usr/bin/find o /tmp/.

Tercero, configuramos el reinicio de servicios sin verificar si estaban activos.
Esto provocaba micro-cortes en el stream de La MIX Radio cada noche a las 3 AM.
Ahora solo reiniciamos el servicio si la verificación de proceso falla.

Cómo saber que funciona

Para verificar que la automatización es correcta, no esperamos al día siguiente.
Ejecutamos el script manualmente con el comando ./mantenimiento.sh y revisamos inmediatamente el archivo de log en /var/log/mantenimiento_nocturno.log.
Si vemos la línea «Limpieza de temporales completada» y recibimos el mensaje en Telegram, sabemos que la cadena de mando está operativa y el servidor está saludable.

Qué sigue

Una vez que el mantenimiento básico es estable, el siguiente paso lógico es implementar rotaciones de logs mediante logrotate.
Esto evita que los archivos de registro crezcan demasiado antes de que el script los borre.
En nuestro caso, configuramos rotaciones semanales para mantener la VM 111 ligera y eficiente.

Compartir

“Post relacionados”

🤖
Asistente de Fabio Martínez
En línea
¡Hola! 👋 Soy el asistente virtual de
Fabio Martínez
Técnico de Radio · Dev Web · Servidores

¿Cómo te llamás?