到目前为止,我使用过这一行/etc/fstab
:
/home/ftp_user /home/app_user/mounts/ftp_user fuse.bindfs mirror=app_user 0 0
这有效。他app_user
可以访问文件,ftp_user
就好像这些文件是他自己的文件一样。
现在我想使用 inotify。它app_user
监听绑定挂载目录中的更改。
如果app_user
触碰其中的文件它就会起作用/home/app_user/mounts/ftp_user
。
ftp_user
但如果触碰了中的文件它就不起作用/home/ftp_user
。
有什么办法可以让它工作吗?
操作系统:仅限Linux。
更新:如果可能的话使用 http
如果可能的话,避免使用巧妙的 inotify 解决方案。通过 http 接收文件通常更好,因为您可以在接受文件之前验证文件。请参阅使用 http,避免使用 ftp/sftp/scp/rsync/smb/mail
答案1
你想实现的目标无法实现。
看看https://bindfs.org/并向下滚动到“已知问题”部分。您将看到
由于 FUSE 没有提供相关 API,因此不会触发 inotify 事件
您可以使用 inotify 来监视 /home/ftp_user,但在这种情况下,设置监视的用户将需要有该目录的访问权限。
答案2
反过来做也可以:
ftp_user 获取虚拟(已挂载)目录,而 app_user 保存真实目录。
/home/ftp_user /home/app_user/import/ftp_user fuse.bindfs mirror=ftp_user 0 0
在虚拟目录中创建新文件(例如/home/ftp_user/new.txt
)。这会触发以用户身份运行的 inotify app_user
。在此示例中,为创建了文件事件/home/app_user/import/ftp_user/new.txt
。