У меня есть очень простой скрипт для регистрации при создании новых файлов, фактически, в тестовых целях я сказал ему следить за любым событием.
#!/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