Спасибо sshfs
волшебство, я могу смонтировать мой домашний каталог с удаленного сервера с
sshfs user@server:/home/user ~/remote
Оптимистично, я думал , что я установил местный inotify
-hook на ~/remote/logFile
(в sshfs
горе) , поэтому локальная программа может реагировать на изменения удаленных журналов.
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
Ничего не происходит . inotifywait
молчит, если я touch
файл локально. Запись в именованный канал не выполняется аналогичным образом.
Почему это?
Как я могу преодолеть этот разрыв?
Я мог бы работать inotifywait
на удаленном компьютере, взломать стратегию сериализации изменений файловой системы и поддерживать соединение с локальным, но тогда я в основном переопределяю SSHFS . И это полностью убивает абстракцию.
inotify
в локальной системе можно обнаружить изменения в удаленной файловой системе. Локальное ядро не в курсе этих изменений. Вам нужно работатьinotifywait
на сервере, а не на клиенте.Ответы:
Файловая система SSHFS построена поверх протокола SFTP . SFTP предоставляет только средства для манипулирования файлами «классическими» способами; клиент отправляет запрос на сервер (перечисляет каталог, загружает файл и т. д.), а сервер отвечает. В этом протоколе нет возможности для сервера самопроизвольно уведомить клиента о том, что что-то произошло.
Это делает невозможным предоставление таких средств, как inotify внутри SSHFS. Можно было бы расширить SSHFS собственными расширениями или дополнить его полноценным SSH-соединением; но я не знаю ни одного такого расширения SSHFS.
Именованные каналы не могут быть реализованы поверх SSHFS по той же причине. NFS, классическая сетевая файловая система, также не имеет возможности поддерживать кросс-машины с именованными каналами. В сетевой файловой системе именованный канал создает независимую точку связи на каждой машине, на которой он монтируется (в дополнение к серверу).
FAM (аналог inotify в SGI IRIX, который был портирован на Linux) предоставляет демон, который позволяет отправлять уведомления по сети. Linux довольно устарел с FAM с тех пор, как на сцену вышла inotify, поэтому я не знаю, будет ли проще запустить FAM, чем использовать собственную систему уведомлений для конкретных приложений. Вам нужно будет настроить переадресацию портов через SSH или установить VPN для защиты сетевого соединения для FAM и NFS.
Если вы решите свернуть свой собственный, предполагая, что вы в порядке предоставления доступа к оболочке клиента, довольно легко запустить монитор inotify от имени клиента: клиент должен открыть соединение SSH и выполнить
inotifywait
команду на сервере. , анализируя его вывод на клиенте. Вы можете настроить главное соединение, чтобы ускорить открытие множества соединений от одного и того же клиента к одному и тому же серверу.источник