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