inotifywait没有反应

inotifywait没有反应

我有一个非常简单的脚本来记录新文件创建的时间,事实上,出于测试目的,我告诉它监视任何事件。

#!/bin/sh                               

WATCHED_DIR="/var/www/html/magento/media/tmp/catalog/product"

echo "Watching directory: $WATCHED_DIR for events"
inotifywait -m -q -r "$WATCHED_DIR" --format "%|e %w%f" |
  while read resp
  do 
    echo "$resp" >> watcher.log
  done

当我在监视目录中创建一个文件时,它会做出反应并记录

CREATE /var/www/html/magento/media/tmp/catalog/product/2/1/new file
OPEN /var/www/html/magento/media/tmp/catalog/product/2/1/new file
CLOSE_WRITE|CLOSE /var/www/html/magento/media/tmp/catalog/product/2/1/new file
OPEN /var/www/html/magento/media/tmp/catalog/product/2/1/new file
CLOSE_NOWRITE|CLOSE /var/www/html/magento/media/tmp/catalog/product/2/1/new file
OPEN|ISDIR /var/www/html/magento/media/tmp/catalog/product/2/1
OPEN|ISDIR /var/www/html/magento/media/tmp/catalog/product/2/1/
OPEN /var/www/html/magento/media/tmp/catalog/product/2/1/new file
CLOSE_NOWRITE|CLOSE /var/www/html/magento/media/tmp/catalog/product/2/1/new file
CLOSE_NOWRITE|CLOSE|ISDIR /var/www/html/magento/media/tmp/catalog/product/2/1
CLOSE_NOWRITE|CLOSE|ISDIR /var/www/html/magento/media/tmp/catalog/product/2/1/
OPEN /var/www/html/magento/media/tmp/catalog/product/2/1/new file
CLOSE_NOWRITE|CLOSE /var/www/html/magento/media/tmp/catalog/product/2/1/new file
OPEN /var/www/html/magento/media/tmp/catalog/product/2/1/new file
CLOSE_NOWRITE|CLOSE /var/www/html/magento/media/tmp/catalog/product/2/1/new file

但是当 apache 创建文件时,没有任何记录

我发现的唯一区别是,当 apache 创建文件时,该文件归 apache 所有,而当我创建文件时,该文件归 root 所有。

-rwxrwxrwx. 1 apache apache 55659 Feb 11 16:46 2164.jpg
-rw-rw-r--. 1 root   root       0 Feb 11 17:02 new file

观察器脚本以 root 身份运行。

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0 29137  2705  0  80   0 - 26538 wait   pts/14   00:00:00 test.sh
1 S     0 29139 29137  0  80   0 - 26538 pipe_w pts/14   00:00:00 test.sh

有人知道解决办法吗?

答案1

您正在使用递归模式,该模式会自动为所有子目录添加监视。每个用户的最大 inode 监视数量为 8192,/var/www/html/magento/media/tmp/catalog/product 下的目录数量是否超过 8192 个?

find /var/www/html/magento/media/tmp/catalog/product -type d | wc -l

如果它大于 8192,您可以按照手册页的建议进行操作:写入 /proc/sys/fs/inotify/max_user_watches

此外,这可能看起来很愚蠢,但在您提供的数据中,我们可以看到 apache 文件的创建时间比 root 创建的文件早 16 分钟。您确定您启动了脚本吗?2 月 11 日 16:46 ?另外,如果您刚刚启动它,则有可能您没有收到事件,因为程序仍然在递归创建 inode 监视,并且由于您使用了“-q”选项,因此您无法知道此阶段何时完成。

答案2

似乎花了一段时间才开始记录,但当它最终开始时,它没有报告 CLOSE_WRITE,而是报告 MOVED_TO

CREATE|ISDIR /var/www/html/magento/media/tmp/catalog/product/i
OPEN|ISDIR /var/www/html/magento/media/tmp/catalog/product/i
CLOSE_NOWRITE|CLOSE|ISDIR /var/www/html/magento/media/tmp/catalog/product/i
MOVED_TO /var/www/html/magento/media/tmp/catalog/product/i/n/intelcorei5.jpg
ATTRIB /var/www/html/magento/media/tmp/catalog/product/i/n/intelcorei5.jpg
ATTRIB /var/www/html/magento/media/tmp/catalog/product/i/n/intelcorei5.jpg

相关内容