The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Слежение за изменением файлов и дир..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Слежение за изменением файлов и дир..."  
Сообщение от auto_tips (ok) on 22-Сен-08, 19:32 
Пакет inotify-tools содержит две полезные утилиты:

inotifywait - ожидать наступления определенного события в файле или дирекотории.

inotifywatch - слежение за статистикой изменений и вывод суммарных данных.

Утилиту inotifywait  удобно использовать в скриптах, например, когда нужно дождаться
завершения внешней операции с файлом и мгновенно среагировать на изменения.

Напрмер, запустим:
   inotifywait /tmp

При попытке создать файл в /tmp утилита завершит работу, выдав:

   /tmp/ CREATE,ISDIR v31549

При попытке создать директорию:

   /tmp/ CREATE,ISDIR 0

Если необходимо следить за изменением во всех директориях в пределах /tmp,
следует использовать флаг рекурсивного контроля "-r".
Для больших директорий может понадобиться расширить лимит /proc/sys/fs/inotify/max_user_watches.
Используя опцию "--fromfile" можно загрузить список контролируемых файлов и директорий из файла.
Опция "-e" позволяет реагировать только на определенный тип события, например, на удаление файла, игнорируя создание и открытие.
Опция '-m' отменяет мгновенный выход после наступления события, что позволяет организовать
визуальное наблюдение или обработку в цикле.

Пример, скрипта для обработки изменения файла:

   #!/bin/sh
   inotifywait -e delete -m /tmp/lock/ | while read dir events file; do
      echo "Removed $dir$file"
   done


При выполнении:

   inotifywatch /tmp

и последующем завершении выполнения через задание таймаута или нажатия ctrl+c,
будет выведена суммарная информация по каждому из классов событий, напрмер:

   total  modify  close_write  close_nowrite  open  create  delete  filename
   22     3       4            1              5     4       5       /tmp/

Или

   inotifywatch -v -e access -e modify -t 60 -r /var/log

через 60 секунд выдаст:

   14     14      /var/log/
   2      2       /var/log/apache2
   4      4       /var/log/postgresql

Что касается кроссплатформенного решения, которое работает, не только в Linux, но и во FreeBSD,
можно привести пример слежения за изменением файла используя Perl модуль EV (http://search.cpan.org/dist/EV/),
использующий универсальную библиотеку-враппер libev:

   #!/usr/bin/perl

   use strict;
   use EV;

   # Следим за изменениями в директории /tmp/watch
   # 0 - интервал опроса по умолчанию
   my $w = EV::stat "/tmp/watch", 0,
   sub {
            my ($w, $revents) = @_;
            warn $w->path, " has changed somehow.".$w->attr."\n";
            $w->stop;
            # На время обработки события, прекращаем прием нотификаций.
            .....
            $w->start;
   };

   EV::loop;


URL:
Обсуждается: http://www.opennet.me/tips/info/1774.shtml

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Слежение за изменением файлов и директорий в Linux shell"  
Сообщение от pavlinux (ok) on 22-Сен-08, 19:32 
Кроссплатформенное это SGI::FAM - http://search.cpan.org/~jglick/SGI-FAM-1.002/lib/SGI/FAM.pm

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Слежение за изменением файлов и директорий в Linux shell"  
Сообщение от Вася (??) on 23-Сен-08, 16:46 
Оно рекурсивно не умеет, точнее только через жопу.

Для всей файловой системы dazuko нужен.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Слежение за изменением файлов и директорий в Linux shell"  
Сообщение от Аноним (??) on 24-Сен-08, 18:42 
http://code.activestate.com/recipes/576377/ - 'это умеет рекурсивно
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру