inotifywait スクリプトが再帰ループを引き起こす

inotifywait スクリプトが再帰ループを引き起こす

FTP アップロード ディレクトリを監視し、新しいファイルがアップロードされるたびに正しい権限を設定する inotifywait スクリプトがあります。

これを実行するのは、リモート クライアントが間違ったファイル モードを強制し、FTP サーバーが chmod コマンドを受け入れないようにすると、リモート クライアントが偽のエラーを吐き出すためです。

したがって、最後の手段は inotify スクリプトですが、これによってまた別の問題が発生します。これがその問題です。

#!/bin/bash
inotifywait -mrq -e ATTRIB --format "%w%f" /home/user/upload/ | while read FILE; do 
  if [[ -f "$FILE" ]];then
    chown user:apache "$FILE" && chmod 640 "$FILE"
  fi
done

したがって、ここで問題が発生するのは、ファイルがアップロードされ、クライアントによって chmod されると、ATTRIB オプションがトリガーされる (想定どおり) ものの、結果として自分のスクリプトで chmod が実行されると、ATTRIB オプションが再度トリガーされ、再帰ループが発生するためだと推測します。

このループを防止するために、inotifywait が自身のアクションを無視するように明確に指示する方法はありますか?

答え1

inotifywaitを待つ代わりに-e attrib、 を待つべきです-e modify

   modify
   A watched file or a file within a watched directory was written to.

   attrib
   The metadata of a watched file or a file within a watched directory was modified.  This includes timestamps,  file permissions, extended attributes etc.

関連情報