Gracias sshfs
magia, puedo montar mi directorio de inicio desde un servidor remoto con
sshfs user@server:/home/user ~/remote
Con optimismo, pensé que había puesto un local de inotify
-hook en ~/remote/logFile
(en el sshfs
montaje) por lo que un programa local puede reaccionar a los cambios de registro remotos.
cd ~/remote
touch logFile # create remote file
inotifywait logFile & # set up local inotify-hook
ssh user@server -x touch /home/user/logFile # touch file from remote
No pasa nada . inotifywait
es silencioso a menos que touch
el archivo localmente. Escribir en una tubería con nombre falla de manera similar.
¿Por qué es esto?
¿Cómo puedo cerrar esta brecha?
Yo podría funcionar inotifywait
en el control remoto, piratear una estrategia serialización cambio de sistema de archivos y mantener una conexión con el local, pero entonces yo estoy básicamente reimplementar SSHFS . Y mata por completo la abstracción.
inotify
el sistema local pueda detectar cambios en un sistema de archivos remoto. El núcleo local está fuera del ciclo en esos cambios. Debe ejecutarinotifywait
en el servidor, no en el cliente.Respuestas:
El sistema de archivos SSHFS está construido sobre el protocolo SFTP . SFTP proporciona solo facilidades para manipular archivos de manera "clásica"; el cliente realiza una solicitud al servidor (enumera un directorio, sube un archivo, etc.) y el servidor responde. No hay ninguna facilidad en este protocolo para que el servidor notifique espontáneamente al cliente que algo ha sucedido.
Esto hace que sea imposible proporcionar una instalación como inotify dentro de SSHFS. Sería posible extender SSHFS con extensiones propietarias, o complementarlo con una conexión SSH completa; pero no conozco ninguna extensión de este tipo para SSHFS.
Las canalizaciones con nombre no se pueden implementar sobre SSHFS por la misma razón. NFS, el sistema de archivos clásico en red, tampoco tiene ninguna facilidad para admitir máquinas cruzadas con nombre de canalizaciones. En un sistema de archivos en red, una tubería con nombre crea un punto de comunicación independiente en cada una de las máquinas donde está montado (además del servidor).
FAM (el análogo de inotify en SGI IRIX, que se ha portado a Linux) proporciona un demonio que permite enviar notificaciones a través de la red. Linux ha desaprobado FAM desde que Inotify entró en escena, así que no sé si hacer que FAM se ejecute sería más fácil que lanzar su propio sistema de notificación específico de la aplicación. Debería configurar algún reenvío de puertos a través de SSH o establecer una VPN para asegurar el enlace de red para FAM y NFS.
Si elige rodar el suyo, suponiendo que está de acuerdo con dar acceso a la shell de los clientes, es bastante fácil ejecutar un monitor inotify en nombre de un cliente: haga que el cliente abra una conexión SSH y ejecute el
inotifywait
comando en el servidor , analizando su salida en el cliente. Puede configurar una conexión maestra para que sea más rápido abrir muchas conexiones del mismo cliente al mismo servidor.fuente