inotify requiere el apoyo del kernel para trabajar. Cuando una aplicación rastrea un directorio, le pide al kernel que le informe cuándo ocurren esos cambios. Cuando se produce el cambio, además de escribir esos cambios en el disco, el kernel también notifica el proceso de observación.
En una máquina NFS remota, el cambio no es visible para el kernel; sucede completamente remotamente. NFS es anterior a inotify y no hay soporte de nivel de red para él en NFS, o algo equivalente.
Si quiere evitar esto, puede ejecutar un servicio en el servidor de almacenamiento (ya que ese kernel siempre verá cambios en el sistema de archivos) que los intermediarios identifiquen las solicitudes de máquinas remotas y reenvíen los datos a los clientes remotos.
Edit: Me parece extraño que NFS se debe a su falta de soporte para inotify.
Sistema de archivos de red (NFS) es un protocolo distribuido archivo del sistema desarrollado originalmente por Sun Microsystems en 1984, wikipedia article
Sin embargo:
Inotify (nodo-i notificar a) es una Subsistema del kernel de Linux que actúa para extender los sistemas de archivos a fin de detectar cambios en el sistema de archivos. [...] Se ha incluido en el kernel principal de Linux desde la versión 2.6.13 (18 de junio,) [...]. wikipedia article
Es difícil esperar un protocolo de red/aplicación portátil para apoyar una función kernel específico desarrollado para un sistema operativo diferente y que apareció más de veinte años después. Incluso si hizo incluyen extensiones para ello, no estarían disponibles o serían útiles en otros sistemas operativos.
* énfasis mío en todos los casos
Otro problema con este; Supongamos que no estamos utilizando una red, sino un sistema de archivos local con buena compatibilidad con inotify: ext3 (supongamos que está montado en /mnt/foo
). Pero en lugar de un disco real, el sistema de archivos se monta desde un dispositivo de retroalimentación; y el archivo subyacente es a su vez accesible en una ubicación diferente en el vfs (por ejemplo, /var/images/foo.img
).
Ahora, no se supone que modifiques los sistemas de archivos ext3 montados, pero aún es razonablemente seguro hacerlo si el cambio se realiza en contenido de archivos en lugar de metadatos.
Supongamos que un usuario inteligente modifica la imagen del sistema de archivos (/var/images/foo.img
) en un editor hexadecimal, reemplazando el contenido de un archivo con otros datos, mientras que al mismo tiempo un reloj inotify está observando el mismo archivo en el sistema de archivos montado.
No hay una manera razonable de que uno pueda hacer que inotify siempre informe el proceso de observación de este tipo de cambio. Aunque probablemente haya algunos giros que podrían tomarse para hacer que ext3 note y honrar el cambio, nada de eso se aplicaría, por ejemplo, al xfs drtiver, que de otra manera es bastante similar.
Tampoco debería. ¡Estás haciendo trampa!. inotify solo puede informarle de los cambios que ocurrieron a través del vfs en el punto de montaje real que se está mirando. Si los cambios ocurrieron fuera de ese VFS, debido a un cambio en los datos subyacentes, inotify no puede ayudarlo y no está diseñado para resolver ese problema.
¿Ha considerado utilizar una cola de mensajes para notificaciones de red?
¿Estás diciendo que solo se notifica la secuencia de comandos del servidor que posee el sistema de archivos o la computadora que realizó el cambio? Ese es el comportamiento que esperaría. – Gabe
Informé una solicitud de función [aquí] (https://bugzilla.kernel.org/show_bug.cgi?id=53161). – HRJ