Linux

使用 inotifywait 監控突發事件

  • September 11, 2017

我有一項服務偶爾會通過rsync. 發生這種情況時,我想觸發伺服器端過程的執行。

由於該inotifywait命令,監視文件或目錄的更改相當容易。但是,我希望每次修改時只收到一次通知,因為上傳後的過程很繁重,並且不想為每個修改的文件執行它。

根據事件時間戳想出一些hack應該不是很大的努力……但我相信這是一個非常普遍的問題。我找不到任何有用的東西。

是否有一些聰明的命令可以計算出爆發?我在想我可以用這種方式使用的東西:

inotifywait -m "$dir" $opts | detect_burst --execute "$post_upload"

根據您自己的答案,如果您想使用 shell read,您可以利用-ttimeout 選項,如果有超時,它將返回程式碼設置為 >128。例如,您的burst腳本可以鬆散地變成:

interval=$1; shift
while :
do  if read -t $interval
   then    echo "$REPLY"            # not timeout
   else    [ $? -lt 128 ] && exit   # eof
           "$@"
           read || exit    # blocking read infinite timeout
           echo "$REPLY"
   fi
done

您可能希望從初始阻塞讀取開始,以避免在開始時檢測到突發結束。

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