El mayor portal de MU Online de Brasil — desde 2003
Tutorial Principiante Infraestructura

Cómo automatizar la limpieza de logs antiguos en el servidor de MU Online

Arma una rutina automática de retención y limpieza de los logs del GameServer, ConnectServer, JoinServer y de la base de datos, evitando que el disco se llene y tumbe el servidor de MU Online en producción.

GA Gabriel · Actualizado el 16 oct 2024 · ⏱ 12 min de lectura
Respuesta rápida

Un servidor de MU Online genera una cantidad impresionante de logs: conexiones en el ConnectServer, acciones de GM en el GameServer, errores de red, transacciones de ítems, intentos de login inválidos y mucho más. Sin una rutina de retención, estos archivos crecen indefinidamente hasta llenar el dis

Un servidor de MU Online genera una cantidad impresionante de logs: conexiones en el ConnectServer, acciones de GM en el GameServer, errores de red, transacciones de ítems, intentos de login inválidos y mucho más. Sin una rutina de retención, estos archivos crecen indefinidamente hasta llenar el disco — y un disco lleno tumba la base de datos, traba el GameServer y hasta puede corromper datos que se estén escribiendo en el momento de la falla. Este tutorial muestra cómo armar una política de retención por tipo de log, automatizar la limpieza/compresión con cron (o el Programador de Tareas en Windows) y monitorear el uso de disco para nunca ser sorprendido.

Por qué los logs sin rotación son un riesgo real

Un servidor promedio de MU Online, con algunos cientos de jugadores simultáneos, puede generar cientos de megabytes hasta pocos gigabytes de log por día, dependiendo del nivel de verbosidad configurado. Sin rotación, en pocas semanas estos archivos ocupan decenas de gigabytes — y el síntoma más común no es un aviso elegante, es la base de datos trabándose por falta de espacio en disco en medio de una transacción, lo que puede generar inconsistencia en cuentas e ítems.

Clasificando los tipos de log por criticidad

No todo log merece el mismo trato. Definir una política de retención por tipo evita borrar algo importante y también evita mantener basura innecesaria durante meses:

Tipo de logEjemplo de archivoRetención recomendada
Auditoría de GMGMLog.txt, AdminActions.log90 días (comprimido después de 7)
Transacción de ítems/ZenTradeLog.txt, ItemLog.txt60-90 días
Conexión/redConnectServer.log, NetworkError.log7 días
Debug/verboseDebug.log, PacketDump.log3 días
Crash/error fatalCrashDump/*.dmp30 días
Anuncios/automatización (scripts propios)anuncios.log, backup.log14 días

Mapeando dónde graba sus logs cada emulador

En IGCN, los logs suelen estar en Data/Log/ dentro de la carpeta de cada servicio (GameServer, ConnectServer, JoinServer). En MuEMU, es común una carpeta Logs/ en la raíz con subcarpetas por día (Logs/2026-07-30/). Antes de escribir el script de limpieza, hacé un inventario real de tu entorno:

find /srv/muserver -iname "*.log" -o -iname "*.txt" | grep -i log | sort
du -sh /srv/muserver/*/Log* 2>/dev/null

Esto muestra exactamente qué carpetas están consumiendo más espacio y debe orientar la prioridad de la política de retención.

Script de limpieza por antigüedad de archivo (Linux)

El comando find con -mtime es la herramienta indicada para aplicar retención basada en la antigüedad del archivo, sin necesidad de lógica compleja:

#!/bin/bash
# limpeza_logs.sh — corre diariamente vía cron

# Logs de debug: borra después de 3 días
find /srv/muserver/Logs/debug -name "*.log" -mtime +3 -delete

# Logs de red: borra después de 7 días
find /srv/muserver/Logs/network -name "*.log" -mtime +7 -delete

# Logs de auditoría/comercio: comprime después de 7 días, borra después de 90
find /srv/muserver/Logs/audit -name "*.log" -mtime +7 ! -name "*.gz" -exec gzip {} \;
find /srv/muserver/Logs/audit -name "*.gz" -mtime +90 -delete

echo "$(date): limpieza de logs completada" >> /var/log/mu/limpeza.log

Script equivalente en Windows (PowerShell)

Para servidores corriendo en Windows, el mismo concepto con Get-ChildItem y filtro de fecha:

$limite = (Get-Date).AddDays(-7)
Get-ChildItem "C:\MuServer\Logs\network" -Filter *.log |
  Where-Object { $_.LastWriteTime -lt $limite } |
  Remove-Item -Force

$limiteAuditoria = (Get-Date).AddDays(-90)
Get-ChildItem "C:\MuServer\Logs\audit" -Filter *.gz |
  Where-Object { $_.LastWriteTime -lt $limiteAuditoria } |
  Remove-Item -Force

Guardalo como limpeza_logs.ps1 y configuralo en el Programador de Tareas de Windows con un disparador diario.

Comprimiendo antes de borrar (retención extendida barata)

Comprimir los logs antiguos antes de borrarlos definitivamente es una forma barata de extender la ventana de investigación sin consumir mucho espacio — los archivos de texto de log suelen comprimir 80-95% con gzip:

gzip -9 /srv/muserver/Logs/audit/GMLog_2026-06-*.txt

Esto convierte, por ejemplo, 500 MB de logs de junio en algo cercano a 30-50 MB, manteniendo la posibilidad de auditoría retroactiva durante mucho más tiempo por el mismo costo de disco.

Rotación nativa vs. script propio

En entornos Linux, logrotate es una alternativa nativa y más robusta que un script crudo de find, especialmente si los procesos del servidor escriben continuamente en el archivo (evita truncar un log en uso):

/srv/muserver/Logs/network/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

La directiva copytruncate es importante acá: copia el contenido actual, lo comprime, y trunca el archivo original en su lugar, sin necesidad de reiniciar el proceso del GameServer para que vuelva a escribir en un archivo "nuevo".

Monitoreando el uso de disco de forma proactiva

Además de limpiar, es importante saber cuándo el disco se está acercando al límite antes de que se convierta en una emergencia. Un script simple de chequeo, reutilizando el webhook de alertas ya usado en el backup y en los eventos:

USO=$(df -h /srv/muserver | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USO" -gt 85 ]; then
  curl -s -X POST "$DISCORD_WEBHOOK_URL" \
    -H "Content-Type: application/json" \
    -d "{\"content\":\"⚠️ ¡Disco del servidor MU al ${USO}% de uso!\"}"
fi

Programando la ejecución

En Linux, un cron diario de madrugada, fuera del horario pico:

30 3 * * * /usr/local/bin/limpeza_logs.sh >> /var/log/mu/limpeza_cron.log 2>&1

En Windows, el Programador de Tareas con un disparador diario a las 03:30, apuntando al script de PowerShell con la política de ejecución liberada (-ExecutionPolicy Bypass), en caso de que la política predeterminada bloquee scripts no firmados.

Diferencia entre borrar y archivar en la nube

Para servidores con requisitos de compliance o historial de disputas con jugadores, borrar definitivamente puede no ser ideal. Una alternativa es mover (no borrar) los logs comprimidos a almacenamiento en la nube antes de quitarlos del disco local, usando el mismo enfoque del tutorial de backup a Google Drive — esto preserva el historial fuera del servidor sin ocupar disco local indefinidamente.

Errores comunes y soluciones

SíntomaCausa probableSolución
Disco lleno aun con el script corriendoRetención demasiado larga para el volumen generadoReducí los días de retención de los logs de mayor volumen
Log truncado en medio de la escritura, el servidor se trabalogrotate sin copytruncate en un log activoAgregá copytruncate a la configuración
El script borra un log de auditoría por errorRegla de retención genérica aplicada a todas las carpetasSepará reglas por tipo de log, nunca uses una regla única
El cron no ejecuta la limpiezaFalta de permiso de ejecución en el scriptEjecutá chmod +x limpeza_logs.sh
No hay alerta antes de que el disco se lleneAusencia de monitoreo proactivoImplementá un chequeo de df -h con webhook de alerta
Se perdieron logs importantesNo existía ninguna política de retención antesDocumentá la política e implementá compresión/archivado a futuro

Lista de verificación de limpieza automatizada de logs

  • Inventario de carpetas de log realizado y volumen de cada una medido.
  • Política de retención definida por tipo de log (auditoría, red, debug, crash).
  • Script de limpieza (find/PowerShell o logrotate) implementado y probado.
  • Compresión configurada para logs de auditoría antes de la eliminación definitiva.
  • Monitoreo de uso de disco con alerta configurado.
  • Programación automática confirmada (cron o Programador de Tareas).
  • Proceso de archivado en la nube evaluado para logs sensibles.

Con la limpieza de logs corriendo sola y el disco monitoreado, eliminás una de las causas más triviales — y más evitables — de caída del servidor. Si la infraestructura todavía está en fase inicial, revisá el tutorial de creación de servidor de MU Online para garantizar que los discos y rutas de log ya nazcan bien dimensionados.

Preguntas frecuentes

¿Por qué no simplemente desactivar el log?

Los logs son esenciales para investigar caídas, detectar cheats/exploits y auditar acciones de GM. El problema no es tener log, es no tener rotación — la solución correcta es mantener los logs por un período razonable y borrar/archivar lo que ya venció, nunca desactivar el log entero.

¿Con qué frecuencia debo correr la limpieza?

Diariamente es lo más común, de madrugada, fuera del horario pico. Servidores muy grandes con alto volumen de log pueden correrla cada 6 horas para evitar picos de uso de disco entre una limpieza y otra.

¿Puedo borrar logs de auditoría de GM y de transacción de ítems?

No se recomienda borrarlos rápido. Los logs de acción de GM, comercio y uso de Zen deben tener una retención más larga (30-90 días) porque son la principal herramienta para investigar denuncias de abuso o duplicación de ítems. Los logs de debug/red pueden tener retención corta (3-7 días).

¿Vale la pena comprimir en vez de borrar?

Sí, para logs de auditoría. Comprimí (gzip/zip) los logs de más de unos días y borralos de verdad recién después de un período mucho más largo — esto ahorra espacio manteniendo la posibilidad de investigación retroactiva.

¿Qué hago si el disco ya está lleno ahora?

Corré primero una limpieza manual de emergencia (borrando o moviendo los logs más antiguos y voluminosos a otro disco/nube), confirmá el espacio liberado, y solo después configurá la rutina automática para no repetir el problema.

GA
Editor de guías y builds

Gabriel cubre gameplay, builds de clases, PvP y progresión. Prueba cada estrategia en un servidor antes de publicar.

Sigue leyendo

Artículos relacionados