inotifywait脚本导致递归循环

inotifywait脚本导致递归循环

我有一个 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.

相关内容