Bash

大文件的去抖 inotifywait

  • June 16, 2022

我將要部署的文件上傳到遠端目錄。該遠端伺服器有一個腳本可以監視目錄中的新文件:

inotifywait --monitor --event create --format '%f' --quiet /foo

當檢測到新文件時,部署過程開始。

問題是上傳需要時間 - 文件一開始寫入就會被檢測到。因此部署失敗,因為它嘗試使用部分文件。

有沒有辦法去抖動,inotifywait所以它只有在完全創建後才報告新文件?

正如您所經歷的那樣,監視create事件並不是很有用:這些事件在文件創建時觸發,但這並不能告訴您是否已向其中寫入任何數據,也不知道何時完成了數據寫入它。

您通常需要監視closeclose_write事件。從手冊頁:

活動

  • close_write

被監視的文件或被監視目錄中的文件在以可寫模式打開後被關閉。這並不一定意味著文件被寫入。

  • close_nowrite

被監視的文件或被監視目錄中的文件在以只讀模式打開後被關閉。

  • close

監視文件或監視目錄中的文件已關閉,無論它是如何打開的。請注意,這實際上是通過偵聽 close_write 和 來實現的close_nowrite,因此接收到的所有關閉事件都將作為其中之一輸出,而不是關閉。

引用自:https://unix.stackexchange.com/questions/706387