![对大文件进行反跳 inotifywait](https://linux22.com/image/207183/%E5%AF%B9%E5%A4%A7%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%E5%8F%8D%E8%B7%B3%20inotifywait.png)
我将要部署的文件上传到远程目录中。该远程服务器有一个脚本可以监视目录中的新文件:
inotifywait --monitor --event create --format '%f' --quiet /foo
当检测到新文件时,部署过程开始。
问题是上传需要时间 - 并且文件一开始写入就会被检测到。因此,部署失败,因为它尝试使用部分文件。
有没有办法消除抖动,inotifywait
以便它仅在完全创建后才报告新文件?
答案1
正如您所经历的那样,关注create
事件并不是很有用:这些事件在创建文件时触发,但这并不能告诉您是否已写入任何数据,也不知道何时有数据写入。完成的向其写入数据。
您通常需要监视close
或close_write
事件。从手册页:
活动
close_write
监视的文件或监视目录中的文件在以可写模式打开后被关闭。这并不一定意味着该文件已被写入。
close_nowrite
监视的文件或监视目录中的文件在以只读模式打开后被关闭。
close
监视的文件或监视目录中的文件被关闭,无论它是如何打开的。请注意,这实际上是通过侦听
close_write
和 来实现的close_nowrite
,因此收到的所有关闭事件都将作为其中之一输出,而不是 CLOSE。