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.