inotifywait não reagindo

2

Eu tenho um script muito simples para registrar quando novos arquivos são criados; na verdade, para fins de teste, eu disse para assistir a qualquer evento.

#!/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

quando eu crio um arquivo dentro do diretório watch, ele reage e registra

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

mas quando o apache cria um arquivo, nada é registrado

A única diferença que posso detectar é quando o apache cria o arquivo, o arquivo é de propriedade do apache, onde, quando eu crio o arquivo, ele é de propriedade do 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

O script do observador é executado como 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

Alguém conhece a solução?

    
por Christian 11.02.2012 / 18:10

2 respostas

1

Parece que demorou um pouco para começar a gravar, mas quando acabou, ele não estava reportando CLOSE_WRITE, estava reportando 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
    
por 12.02.2012 / 00:02
2

Você está usando o modo recursivo, que adiciona o relógio automaticamente a todos os subdiretórios. A quantidade máxima de relógios inode por usuário é 8192, existem mais de 8192 diretórios sob / var / www / html / magento / media / tmp / catalog / product?

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

se for maior que 8192, você pode fazer conforme sugerido pela man page: escreva para / proc / sys / fs / inotify / max_user_watches

Além disso, pode parecer estúpido, mas nos dados que você fornece, podemos ver que o arquivo do apache foi criado 16 minutos antes do arquivo criado pelo root. Tem certeza de que você lançou seu roteiro antes 11 de fevereiro, 16:46? Além disso, se você o lançou antes, existe a possibilidade de você não ter recebido o evento porque o programa ainda estava recursivamente criando os relógios inode, e como você usa a opção "-q" você não tem como saber quando esta fase tem concluído.

    
por 11.02.2012 / 19:07