【问题标题】:Watchdog (osx) not notifying on remote network changes看门狗(osx)未通知远程网络更改
【发布时间】:2012-02-28 23:07:44
【问题描述】:

我正在使用Watchdog 来监控网络目录,非递归的,用于随着时间的推移创建特定模式的文件。我看到的问题是,虽然我在本地测试时效果很好,但如果我从远程机器更改受监控的目录,则不会触发事件。

以下是我的配置的具体细节:

  • OSX
  • 在 NFS 挂载上以非递归方式监控单个目录
  • python 2.6

使用股票示例 sn-p 可以轻松复制我的问题示例:

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path=sys.argv[1], recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

如果您在网络目录上启动它,然后从同一系统进行更改,则会分派事件。但是,如果您随后从网络上的另一台计算机更改目录,则不会调度任何事件。

我是否遗漏了有关 kqueue 限制的某些内容(或者可能是 OSX 上的 FSEvents,因为它说它首先是 Watchdog 的首选)?

我对这个 python 包很感兴趣,并打算开始将它用于其他脚本来替换文件系统轮询,但我似乎找不到任何关于我为什么会看到这个问题的信息。

更新

我还测试了MacFSEvents 并遇到了同样的问题。然后我修改了上面的测试脚本,强制尝试不同的观察者:

# does not work with remote changes
from watchdog.observers.fsevents import FSEventsObserver as Observer
# does not work with remote changes
from watchdog.observers.kqueue import KqueueObserver as Observer
# only option that works because its actually polling every second
from watchdog.observers.polling import PollingObserver as Observer

所以至少现在,我可以使用轮询观察者,而不必修改我的代码,直到有人能够阐明我遇到的真正问题。

【问题讨论】:

  • 这对我有用!谢谢!

标签: python monitoring watchdog fsevents kqueue


【解决方案1】:

我很确定文件系统事件不能在 NFS 上工作——原因是内核通常管理文件系统事件的方式是它在内核中有一个层可以触发活动——使用 NFS 没有设施通知更改,您只能获取 inode 列表,写入一些块,读取一些块.. 等等。这非常少。

要让文件系统事件在 NFS 上运行,您必须不断轮询 NFS 服务器。

AFP 可能有一些功能,如果你有这种功能,你可以安装 netatalk 并尝试一下。

如果你绝对需要做这样的事情而 netatalk 不这样做 - 你最好的办法是启动并运行 OSXFuse 并编写一个 NFS 覆盖层,它实际上只是坐在那里并轮询更改。但是,您将被限制为“截断、修改、附加、删除”等。

另请参阅:Use libfuse in a project, without root access (for installation)? FTP mounts & inotify/kqueue/FSEvents

【讨论】:

  • 到目前为止信息真的很好!您知道为什么 nfs.server.fsevents 是可配置的 nfs.conf 设置吗? developer.apple.com/library/mac/documentation/Darwin/Reference/…
  • nfs.server.fsevents 适用于 mac 导出到世界的 NFS 文件系统,而不是它安装在远程机器上的挂载。
  • 完美。谢谢!赞成并接受。我会坚持使用 Polling 观察者作为看门狗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
相关资源
最近更新 更多