Как постоянно контролировать каталог с помощью команды dnotify / inotify - PullRequest
32 голосов
/ 27 сентября 2011

Я новичок в команде dnotify / inotify. Может ли кто-нибудь помочь мне, как написать сценарий так, чтобы он постоянно отслеживал каталог и указывал, что в нем есть какое-то изменение или модификация.

Ответы [ 3 ]

28 голосов
/ 27 сентября 2011

Inotify сам по себе является модулем ядра, доступным через вызовы, например, из C-программы.http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/

Существует набор приложений, называемый inotify-tools, который содержит:

inotifywait - ожидание изменений в файлах с использованием inotify

http://linux.die.net/man/1/inotifywait

и

inotifywatch - собирать статистику доступа к файловой системе с помощью inotify

http://linux.die.net/man/1/inotifywatch

Вы можете использовать inotify напрямую изкомандная строка, например, такая, чтобы непрерывно отслеживать все изменения в домашнем каталоге (может генерировать много выходных данных):

inotifywait -r -m $HOME

А вот сценарий, который непрерывно отслеживает и реагирует на активность журнала Apache, копируется изman-файл inotifywait:

#!/bin/sh
while inotifywait -e modify /var/log/messages; do
  if tail -n1 /var/log/messages | grep httpd; then
    kdialog --msgbox "Apache needs love!"
  fi
done
12 голосов
/ 20 июня 2013

Ниже приведено то, что я использую для просмотра операций с отдельным файлом.«-m» вызывает мониторинг против выхода только после одного события.Чтобы получить временные метки, вам понадобится не менее 3.13 версии inotify-tools, но если это не важно (или недоступно в вашей ОС, или сложно обновить), вы можете пропустить параметры timefmt и format.«cat /etc/resolv.conf» в другой оболочке приводит к следующим результатам:

$ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' /etc/resolv.conf

Setting up watches.  
Watches established.
12:49 /etc/resolv.conf OPEN 
12:49 /etc/resolv.conf ACCESS 
12:49 /etc/resolv.conf CLOSE_NOWRITE,CLOSE 

inotifywait также имеет опции для мониторинга каталогов, поэтому проверьте страницу руководства.Добавьте -r для рекурсивного мониторинга дочерних элементов каталога.

Вот пример с командами, которые я набрал в другом окне, показанном с префиксом "->":

$ inotifywait -mr --timefmt '%H:%M' --format '%T %w %e %f' /home/acarwile/tmpdir
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.

-> cd into directory, no info
-> ls in directory
13:15 /home/acarwile/tmpdir/ OPEN,ISDIR 
13:15 /home/acarwile/tmpdir/ CLOSE_NOWRITE,CLOSE,ISDIR 

-> touch newfile
13:16 /home/acarwile/tmpdir/ CREATE newfile
13:16 /home/acarwile/tmpdir/ OPEN newfile
13:16 /home/acarwile/tmpdir/ ATTRIB newfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE newfile

-> mv newfile renamedfile
13:16 /home/acarwile/tmpdir/ MOVED_FROM newfile
13:16 /home/acarwile/tmpdir/ MOVED_TO renamedfile

-> echo hello >renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ OPEN renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile

-> touch renamedfile
13:17 /home/acarwile/tmpdir/ OPEN renamedfile
13:17 /home/acarwile/tmpdir/ ATTRIB renamedfile
13:17 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile

-> rm renamedfile
13:17 /home/acarwile/tmpdir/ DELETE renamedfile

-> cd ..; rmdir tmpdir
13:17 /home/acarwile/tmpdir/ DELETE_SELF 

После вышеупомянутогоЯ попытался переделать tmpdir ("mkdir tmpdir"), но ничего не получил от этого.Новый tmpdir не является тем же каталогом, что и старый tmpdir.Пришло время просто ^ C и прекратить его уведомлять, ждать.

4 голосов
/ 29 апреля 2014

Как я уже говорил https://superuser.com/a/747574/28782,, я создал вспомогательный скрипт, который использует inotifywait без некоторых его прямых ограничений: inotifyexec

Пример использования (предположим, что вы добавили его в системный путь как исполняемый файл):

inotifyexec "echo test" -r .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...