我有一个 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
所以我猜测这里出错的原因是,一旦文件被上传并由客户端进行 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.