Sincronización de ficheros desatendida

Sincronización de ficheros desatendida

Existe una forma bastante cómoda de sincronizar ficheros entre servidores linux que no requiere tener ningún cron programado y utiliza rsync de fondo. Se trata de:

Lsyncd + rsync / rsync-SSH

  • Lsyncd “escucha” cambios en el sistema de archivos (usando inotify en Linux) y cuando detecta cambios, lanza automáticamente rsync para replicarlos al servidor remoto.
  • Esto permite sincronización “casi en tiempo real”, sin tener que configurar tareas manuales con cron.
  • Es útil especialmente si los cambios no son extremadamente frecuentes o hay un volumen moderado de ficheros.
  • Limitación a tener en cuenta: suele funcionar mejor como sincronización unidireccional (de un servidor “origen” hacia otro “destino”). Montar una sincronización bidireccional con Lsyncd puede dar problemas de “loop” o conflictos.

✅ 1. Instalación dentro del servidor

En tu servidor (Debian/Ubuntu):

apt update 
apt install lsyncd rsync openssh-client

✅ 2. Configuración ligera y estable (/etc/lsyncd/lsyncd.conf.lua)

Crea el fichero:

nano /etc/lsyncd/lsyncd.conf.lua

Pega esto (optimizado para Proxmox + LXC + pocos recursos):

settings {
    logfile    = "/var/log/lsyncd.log",
    statusFile = "/var/log/lsyncd-status.log",
    statusInterval = 20,
    nodaemon = false,
    maxProcesses = 1,      -- Muy ligero: solo 1 proceso de rsync
    inotifyMode = "CloseWrite" -- Reduce eventos innecesarios
}

sync {
    default.rsyncssh,

    source = "/ruta/origen/",

    host = "usuario@IP_DESTINO",
    targetdir = "/ruta/destino/",

    delay = 5,  -- Espera 5s para agrupar cambios y ahorrar CPU/IO

    rsync = {
        archive = true,
        compress = true,
        verbose = false,
        _extra = { "--delete" }  -- Mantiene espejo exacto
    }
}

Parámetros:

  • maxProcesses = 1 → solo un rsync por vez, ideal para contenedores ligeros.
  • inotifyMode = "CloseWrite" → reduce eventos basura.
  • delay = 5 → evita ejecuciones excesivas de rsync.
  • Uso de SSH → más seguro entre servidores.
  • _extra = { "--delete" } → elimina en destino lo que borres en origen (espejo 1:1).

✅ 3. Activar el servicio

systemctl enable lsyncd 
systemctl start lsyncd 
systemctl status lsyncd

Si no hay errores, ya está funcionando.

✅ 4. Crear clave SSH en el servidor origen

En el contenedor donde corre Lsyncd:

ssh-keygen -t ed25519

Cuando pregunte por la ruta, pulsa ENTER (usa ~/.ssh/id_ed25519 por defecto).
Cuando pregunte por contraseña de la clave, pulsa ENTER (sin passphrase), porque Lsyncd no soporta claves protegidas.


✅ 5. Copiar la clave pública al servidor remoto

En el contenedor:

ssh-copy-id usuario@IP_DEL_SERVIDOR_DESTINO

Ejemplo:

ssh-copy-id [email protected]

Te pedirá una sola vez la contraseña del servidor remoto.


✅ 6. Probar que funciona sin contraseña

En el servidor origen:

ssh usuario@IP_DEL_SERVIDOR_DESTINO

Debe entrar sin pedir contraseña.

Si te pide contraseña, algo está mal. Lo solucionamos en minutos.

✅ 7. Comprobar el estado/progreso de lsynd

En el servidor origen:

Puedes ver qué está pasando en tiempo real:

watch -n 1 cat /var/log/lsyncd.status