我有一個 inotifywait 腳本,用於監視 ftp 上傳目錄,每當上傳新檔案時,它都會設定正確的權限。
我這樣做是因為遠端客戶端強制使用錯誤的檔案模式並阻止 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
所以我猜測這裡出現的問題是,一旦客戶端上傳並 chmodded 文件,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.