我有一个非常简单的脚本来logging什么时候创build新文件,实际上,为了testing的目的,我告诉它要监视任何事件。
#!/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
当我在watch目录中创build一个文件时,它会作出反应并logging下来
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创build一个文件时,什么都不logging
唯一的区别是我可以发现当apache创build文件时,文件被apache拥有,当我创build文件时,它由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身份运行。
FS 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
有谁知道解决scheme?
您正在使用recursion模式,它会自动为所有子目录添加监视。 每个用户的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,则可以按照手册页的build议进行操作:写入/ proc / sys / fs / inotify / max_user_watches
此外,可能看起来很愚蠢,但是在您提供的数据中,我们可以看到apache文件是在由root创build的文件前16分钟创build的。 你确定在 2月11日16:46 之前发表了你的剧本吗? 另外,如果你之前启动了它,那么你可能没有收到这个事件,因为程序仍然recursion地创build了inode手表,而且由于使用了“-q”选项,所以你无法知道这个阶段是什么时候完成。
似乎需要一段时间才能开始录制,但最终确实是这样,它不报告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