Dzięki sshfs
magii, mogę zamontować mój katalog domowy ze zdalnego serwera za pomocą
sshfs user@server:/home/user ~/remote
Optymistycznie pomyślałem, że inotify
ustawię lokalny hak na ~/remote/logFile
(w sshfs
montażu), aby lokalny program mógł zareagować na zdalne zmiany dziennika.
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
Nic się nie dzieje . inotifywait
milczy, chyba że touch
plik jest lokalnie. Zapisywanie do nazwanego potoku kończy się podobnie.
Dlaczego to?
Jak mogę wypełnić tę lukę?
I mógłby działać inotifywait
na pilocie, włamywania się na zmianę strategii serializacji systemu plików i utrzymania połączenia lokalne, ale ja w zasadzie reimplementing SSHFS . I to całkowicie zabija abstrakcję.
inotify
w systemie lokalnym można było wykryć zmiany w zdalnym systemie plików. W tych zmianach lokalne jądro jest poza pętlą. Musisz uruchomićinotifywait
na serwerze, a nie na kliencie.Odpowiedzi:
System plików SSHFS jest zbudowany na protokole SFTP . SFTP zapewnia jedynie narzędzia do manipulowania plikami w „klasyczny” sposób; klient wysyła żądanie do serwera (wyświetla katalog, przesyła plik itp.), a serwer odpowiada. W tym protokole nie ma możliwości, aby serwer spontanicznie powiadomił klienta, że coś się stało.
Uniemożliwia to zapewnienie funkcji takiej jak inotify w SSHFS. Możliwe byłoby rozszerzenie SSHFS o zastrzeżone rozszerzenia lub uzupełnienie go o pełnoprawne połączenie SSH; ale nie znam żadnego takiego rozszerzenia SSHFS.
Nazwanych potoków nie można zaimplementować na SSHFS z tego samego powodu. NFS, klasyczny sieciowy system plików, nie ma też żadnej funkcji do obsługi nazwanych potoków między maszynami. W sieciowym systemie plików nazwany potok tworzy niezależny punkt komunikacji na każdym komputerze, na którym jest zamontowany (oprócz serwera).
FAM (analog inotify w SGI IRIX, który został przeniesiony do Linuksa) zapewnia demona, który umożliwia wysyłanie powiadomień przez sieć. Linux raczej przestarzał FAM od czasu pojawienia się inotify, więc nie wiem, czy uruchomienie FAM byłoby łatwiejsze niż uruchomienie własnego systemu powiadomień specyficznych dla aplikacji. Musisz skonfigurować przekierowanie portów przez SSH lub VPN, aby zabezpieczyć łącze sieciowe dla FAM i NFS.
Jeśli zdecydujesz się na własne, zakładając, że nie masz nic przeciwko udzieleniu dostępu do powłoki klienta, dość łatwo jest uruchomić monitor inotify w imieniu klienta: poproś klienta, aby otworzył połączenie SSH i uruchom
inotifywait
polecenie na serwerze , analizuje swoje dane wyjściowe na kliencie. Możesz skonfigurować połączenie główne, aby przyspieszyć otwieranie wielu połączeń od tego samego klienta do tego samego serwera.źródło