Dank sshfs
Magie kann ich mein Home-Verzeichnis von einem Remote-Server mit mounten
sshfs user@server:/home/user ~/remote
Optimistisch, ich dachte , dass ich eine lokal gesetzt würde inotify
-hook auf ~/remote/logFile
(in der sshfs
Halterung) so ein lokales Programm auf Remote - Log - Änderungen reagieren kann.
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
Nichts passiert . inotifywait
ist still, es sei denn, ich touch
die Datei lokal. Das Schreiben in eine Named Pipe schlägt ebenfalls fehl.
Warum ist das?
Wie kann ich diese Lücke schließen?
Ich könnteinotifywait
auf der Fernbedienung laufen , eine Serialisierungsstrategie für Dateisystemänderungen hacken und eine Verbindung zum lokalen Netzwerk aufrechterhalten, aber dann implementiere ich SSHFS im Grunde genommen neu . Und es tötet die Abstraktion vollständig ab.
inotify
auf dem lokalen System eine Möglichkeit gibt, Änderungen auf einem entfernten Dateisystem zu erkennen. Der lokale Kernel ist bei diesen Änderungen nicht in der Schleife. Sie müsseninotifywait
auf dem Server ausgeführt werden, nicht auf dem Client.Antworten:
Das SSHFS-Dateisystem basiert auf dem SFTP- Protokoll. SFTP bietet nur die Möglichkeit, Dateien auf "klassische" Weise zu bearbeiten. Der Client sendet eine Anfrage an den Server (Liste eines Verzeichnisses, Hochladen einer Datei usw.), und der Server antwortet. In diesem Protokoll gibt es keine Möglichkeit für den Server, den Client spontan zu benachrichtigen, dass etwas passiert ist.
Dies macht es unmöglich, eine Funktion wie inotify innerhalb von SSHFS bereitzustellen. Es wäre möglich, SSHFS mit proprietären Erweiterungen zu erweitern oder durch eine vollwertige SSH-Verbindung zu ergänzen. Ich kenne jedoch keine solche Erweiterung für SSHFS.
Named Pipes können aus demselben Grund nicht über SSHFS implementiert werden. NFS, das klassische vernetzte Dateisystem, bietet auch keine Möglichkeit, maschinenübergreifende Pipes zu unterstützen. In einem vernetzten Dateisystem erstellt eine Named Pipe einen unabhängigen Kommunikationspunkt auf jedem der Computer, auf denen sie bereitgestellt ist (zusätzlich zum Server).
FAM (das inotify-Analogon in SGI IRIX, das auf Linux portiert wurde) bietet einen Daemon, mit dem Benachrichtigungen über das Netzwerk gesendet werden können. Linux hat FAM seit Inotify eher veraltet, daher weiß ich nicht, ob es einfacher wäre, FAM zum Laufen zu bringen, als ein eigenes anwendungsspezifisches Benachrichtigungssystem zu entwickeln. Sie müssen eine Portweiterleitung über SSH einrichten oder ein VPN einrichten, um die Netzwerkverbindung für FAM und NFS zu sichern.
Wenn Sie sich für eine eigene Version entscheiden und davon ausgehen, dass Sie dem Client Shell-Zugriff gewähren können, ist es ziemlich einfach, einen Inotify-Monitor im Auftrag eines Clients auszuführen: Lassen Sie den Client eine SSH-Verbindung öffnen und führen Sie den
inotifywait
Befehl auf dem Server aus , analysiert seine Ausgabe auf dem Client. Sie können eine Master-Verbindung einrichten , um das Öffnen vieler Verbindungen vom selben Client zum selben Server zu beschleunigen.quelle