The OpenNET Project / Index page

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

Выполнение действия при изменении или создании файла в Linux
Утилита inotifywait из состава пакета inotify-tools позволяет организовать выполнение 
определенного действия в shell скрипте, при изменении, создании, удалении,
перемещении и выполнении
других операций с файлами.

Выполняем программу при появлении нового файла в директории

   inotifywait -e create /home/ftp/incoming --format "%w%f" -q -m| while read file; do
     clamscan $file
  done

Для отслеживания изменений вместо create можно использовать modify, удаления -
delete, перемещения - move и т.п.
 
28.08.2009
Ключи: inotify, watch / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ RSS ]
  • 1.1, pavlinux (ok), 20:24, 28/08/2009 [ответить]  []     [к модератору]
  • +/
    На одной консольке делаю
    # inotifywait -e modify /tmp --format "%w%f" -q -m | while read file; do clamscan $file; done;

    на другой
    # > /tmp/test
    # dd if=/dev/urandom of=/tmp/test count=1024 bs=100

    clamav проверяет этот файл бесконечно.

    Далее:

    # dd if=/dev/urandom of=/tmp/test1 count=1024 bs=100
    # dd if=/dev/urandom of=/tmp/test2 count=1024 bs=100
    # dd if=/dev/urandom of=/tmp/test3 count=1024 bs=100

    Ни один из выше описаных не проверится, так как безконечный цикл на самом первом.


    inotifywait -e create - нормально.

     
     
  • 2.2, vkshlu (?), 18:16, 29/08/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    меняется atime на файле при каждой проверке кламом ?
     
     
  • 3.3, pavlinux (ok), 19:10, 29/08/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    неа! :-|

    Тока так


    x=0; inotifywait -e modify /tmp --format "%w%f" -q -m | while read i; do if [ "$x" -eq 0 ]; then clamscan $i; ((x++)); fi; done;


    Забавные результаты:

    # x=0; inotifywait -e modify /tmp --format "%w%f" -q -m | while read i; do ((x++)); echo "COUNT = $x "; done;  
    # dd if=/dev/urandom of=/tmp/test count=1 bs=1

    выдаёт
    COUNT = 1
    COUNT = 2

    # dd if=/dev/urandom of=/tmp/test count=1 bs=100
    COUNT = 1
    COUNT = 2

    # dd if=/dev/urandom of=/tmp/test count=100 bs=1
    COUNT = 1
    COUNT = 2
    ...
    ...
    COUNT = 100
    COUNT = 101

    # dd if=/dev/urandom of=/tmp/test count=100 bs=1
    COUNT = 1
    COUNT = 2
    ...
    ...
    COUNT = 33
    COUNT = 34


    Ну в общем ясно, dd использует write() count раз, а COUNT - это сколько inotifywait успеет поймать, и ждет пока тело while отработает.

    Так что, лучше наверно использовать inotifywait -e close

     

  • 1.4, Добрый Дохтур (?), 21:31, 30/08/2009 [ответить]  [] []     [к модератору]
  • +/
    ох, лисапедисты... есть же icron(inotify cron)
     
     
  • 2.5, pavlinux (ok), 15:09, 31/08/2009 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    А еще был SGI FAM.
     

  • 1.6, bliss (?), 23:19, 01/09/2009 [ответить]  []     [к модератору]
  • +/
    Есть перловая утила -- iwatch. Мне в ней неудобен конфиг -- в xml файле. На мой взгляд, xml для такого перебор. Начал переписывать под свои нужды, для поддержки самбы.
     
  • 1.7, жадный баклажан (?), 16:57, 07/08/2013 [ответить]      [к модератору]
  • +/
    Почему параметр -d не работает? Или что я не так делаю?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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