Назад | Перейти на главную страницу

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

Кто-нибудь знает решение?

Вы используете рекурсивный режим, который автоматически добавляет часы для всех подкаталогов. Максимальное количество часов inode на пользователя составляет 8192, существует ли более 8192 каталогов в / var / www / html / magento / media / tmp / catalog / product?

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

если он больше 8192, вы можете сделать так, как это предлагается на странице руководства: напишите в / proc / sys / fs / inotify / max_user_watches

Кроме того, это может выглядеть глупо, но по предоставленным вами данным мы видим, что файл apache был создан за 16 минут до файла, созданного пользователем root. Вы уверены, что запустили свой скрипт перед 11 фев, 16:46? Кроме того, если вы запустили его непосредственно перед этим, есть вероятность, что вы не получили событие, потому что программа все еще рекурсивно создавала часы 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