对于手动编辑的文件,inotify IN_CLOSE_WRITE 仅触发一次

Posted

技术标签:

【中文标题】对于手动编辑的文件,inotify IN_CLOSE_WRITE 仅触发一次【英文标题】:inotify IN_CLOSE_WRITE fires only once for manually edited file 【发布时间】:2013-11-21 17:37:07 【问题描述】:

我正在运行带有 gevent 和 gevent_inotifyx 的 python 来观察文件是否有任何修改,使用 IN_CLOSE_WRITE 掩码等待文件在写入后关闭。我第一次触发了我的事件,但在那之后就没有了。我使用 vim 手动编辑文件。

使用不同的日志文件进行监视,并且按预期工作。这是一个 python 日志文件,只要日志文件随内容发生更改,我就会触发一个事件。

以前有人遇到过这种情况吗?这可能是由于某些同步或刷新到磁盘造成的吗?

【问题讨论】:

您希望在 vim 中看到哪些特定命令伴随IN_CLOSE_WRITE 事件? 安装命令行工具inotifywait,运行它并检查当你通过vim编辑文件时它报告的事件。如果它报告IN_CLOSE_WRITE 事件(就像我在最后尝试此操作时所做的那样),则可能在您的代码中 在vim中我用:wq保存,我试试inotifywait调试告诉你,谢谢。 我试过这个命令,inotifywait -m -e close_write /home/python_tools/logging.conf 你是否也在 inotifywait 中使用这些开关?当我用 vim 手动编辑它时,我根本看不到任何事件。但是当我对日志文件使用相同的命令时,我会在文件被修改时引发 close_write 事件。我开始考虑 vim 是否进行了不同步的系统调用。我也会和其他编辑一起尝试.. Get vim to modify the file instead of moving the new version on it?的可能重复 【参考方案1】:

默认情况下,Vim 将文件内容写入一个临时文件,然后将其移到原始文件上,参见:help backup。由于现在这是一个不同的文件(句柄),您的事件将停止触发。

你可以通过设置让 Vim 覆盖原文件

:set backupcopy=yes

如果您想普遍处理此问题,则必须改为监视文件的目录并注意文件移动。

【讨论】:

以上是关于对于手动编辑的文件,inotify IN_CLOSE_WRITE 仅触发一次的主要内容,如果未能解决你的问题,请参考以下文章

在 vim 中编辑时出现过多的 inotify 事件

inotify为啥无法检视共享文件夹

使用 INotify 监视具有多个符号链接的文件

inotify+rsync同步

linux系统中rsync+inotify实现服务器之间文件实时同步

OpenVMS 的 inotify 是啥?