Incrontab

Материал из OpenWiki
Перейти к: навигация, поиск

incrontab - таблица наблюдения incron

incron: - это демон запускающий программы по событиям файловой системы, аналогично тому как старый добрый cron их запускает по расписанию.

Синтаксис

incrontab [-u user] [-f config] file

incrontab [-u user] [-f config] [-l | -r | -e | -t | -d]

Описание

В файлах incrontab содержатся инструкции службы inotify cron (incron). Существуют два типа таблиц incrontab - системные - с правами root, и пользовательские с правами пользователей.

Системные таблицы находятся по умолчанию в /etc/incron.d/ и могут иметь различные имена.Каждая системная таблица существует отдельно внутри incron, и их наблюдения никогда не пересекаются.

У каждого пользователя есть их собственная пользовательская таблица incrontab, команды которой будут выполняться с привилегиями этого пользователя. У системных пользователей (таких как apache, postfix, nobody и т.д.) не может быть своего собственного incrontab.

Командой incrontab можно создавать, удалять, изменять и просматривать пользовательскую таблицу.

Файлы incrontab читаются, когда incrond (8) стартует и отслеживаются после любого изменения incrontab файла, пока incrond работает.

Формат файлов incrontab

      <path> <mask> <command>

Пустые строки игнорируются.

Где путь <path> - абсолютный путь за которым устанавливается наблюдение, <mask> - Перечень событий (в символьной или числовой форме), и <command> - исполняемый файл (или скрипт) с его параметрами. Ниже приведен перечень возможных событий <mask>. Исполняемый файл может быть задан с абсолютным путем, или только именем программы (если пути известны системе).

Пожалуйста помните, что путь <path> может быть поставлен на наблюдение только один раз на каждую таблицу (иначе, только первое упоминание имеет силу, и сообщение об ошибках отправляется системному файлу регистрации).

Обозначение событий

IN_ACCESS         Доступ к файлу (чтение) (*)
IN_ATTRIB         Изменились метаданные (permissions, timestamps, extended attributes, etc.) (*)
IN_CLOSE_WRITE    Открытый для записи файл был закрыт (*)
IN_CLOSE_NOWRITE  Файл закрыт без записи (*)
IN_CREATE         В наблюдаемом пути создан файл или директория  (*)
IN_DELETE         В наблюдаемом пути удален файл или директория  (*)
IN_DELETE_SELF    Был удален наблюдаемый файл или директория
IN_MODIFY         Файл был изменен (*)
IN_MOVE_SELF      наблюдаемый файл или директория были перемещены
IN_MOVED_FROM     Файл был перемещен из наблюдаемой директории (*)
IN_MOVED_TO       Файл был перемещен в наблюдаемую директорию (*)
IN_OPEN           Файл открыт (*)

Для событий отмеченных выше звездочкой возвращается параметр имя файла в пределах наблюдаемого каталога.

Любое из событий описывается как IN_ALL_EVENTS.

Дополнительно могут быть применены псевдонимы:

IN_MOVE - который является комбинацией событий IN_MOVED_FROM и IN_MOVED_TO
IN_CLOSE - как комбинация IN_CLOSE_WRITE и IN_CLOSE_NOWRITE.

Кроме того могут употребляться директивы:

IN_DONT_FOLLOW    Не разыменовывать путь если это символическая ссылка.
IN_ONESHOT        Отслеживать путь только до первого события.
IN_ONLYDIR        наблюдать только если это каталог.

спецсимволы-переменные командной строки <command>

 $$  Символ доллара
 $@  наблюдаемый путь
 $#  имя файла с которым произошло наблюдаемое событие
 $%  наблюдаемое событие (в текстовом виде)
 $&  код события (в числовом виде)

примеры

Приведем примеры правил используемых в файлах конфигурации incrontab.

/tmp     IN_ALL_EVENTS         abcd $@/$# $%
/usr/bin IN_ACCESS,IN_NO_LOOP  abcd $#
/home    IN_CREATE             /usr/local/bin/abcd $#
/var/log 12                    abcd $@/$#


Первая строчка задает правило отслеживания всех возможных событий в каталоге /tmp. Когда событие происходит запускается программа abcd, которой в качестве параметров передаются 2 поля: первое- полный путь и имя файла второе событие в текстовом виде.

Второй пример показывает как отслеживать чтение из каталога /usr/bin. Приложение abcd запускается как обработчик, и соответствующее наблюдение будет заблокировано до завершения программы abcd. Имя файла без указания пути передается как аргумент обработчику.

Параметр IN_NO_LOOP КРАЙНЕ важен в некоторых случаях и требует пояснения, ибо сам incron не имеет защиты от зацикливания. Этот параметр как раз позволяет избежать его, например, в случае, когда мы наблюдаем за изменением файла, и меняем его же содержимое согласно некоему правилу, при этом мониторинг замораживается до окончания выполнения команды abcd - зацикливания не будет.

Третье правило следит за созданием новых файлов и директорий в каталоге /home. (Например это практически всегда встречается при регистрации новых пользователей). Программа обработчик указана с полным абсолютным путем.

Последняя строчка показывает возможность применения числовой маски событий. в данном случае 12 - соответствует событиям IN_ATTRIB,IN_CLOSE_WRITE.

От себя добавлю, что в качестве разделителя в строках файлов конфигурации воспринимается только ОДИН пробел, на табуляцию или несколько пробелов incron реагирует не корректно, записывая в syslog ошибку 'cannot exec process: No such file or directory'. То есть пример выше должен выглядеть так:

/tmp IN_ALL_EVENTS abcd $@/$# $%
/usr/bin IN_ACCESS,IN_NO_LOOP abcd $#
/home IN_CREATE /usr/local/bin/abcd $#
/var/log 12 abcd $@/$#

Где поискать ещё доки :))

man incrond, man 1 incrontab, man 5 incrontab, man incron.conf

- Статья на википедии о подсистеме ядра Линукс на которой основана работа incron

- API подсистемы inotify для языка C Статья на сайте IBM


- Incron(Англ)

примечания автора перевода

Настоящий перевод - это небольшой микс из man 1 incrontab и man 5 incrontab.

Надо сказать что сам incron произвел на меня сильное впечатление.

Так, например, занимаясь настройкой HylaFax сервера и интеграцией с корпоративной системой документооборота, я столкнулся с нехваткой данных передаваемых механизмом интеграции HylaFax. А incron изящно сделал вообще не нужными какие то частные механизмы связей программ. Или, например, представьте теперь насколько просто подключить антивирус к тому что пишут пользователи через самбу ?

Без преувеличения, это такое же сильное дополнение linux'a как и величественный cron.

PS

С радостью принимаются замечания и обсуждения ! :) С не меньшей радостью принимаются благодарности, как письменные так и в виде яндекс.денег: 41001101259634 которых не жалко, если мой скромный труд вам помог :))