Incron: Планирование операций обработки событий в файловой системе

Лекция



Привет, Вы узнаете о том , что такое incron, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое incron, планирование операций обработки событий в файловой системе , настоятельно рекомендую прочитать все из категории Операционная система LINUX.

Incron: Планирование операций обработки событий в файловой системе

Введение

Большинству пользователей Linux хорошо знакома удобная утилита cron, предназначенная для планирования и выполнения разнообразных операций в заданное время. Но что, если действие должно быть выполнено не при наступлении определенного момента времени, а при возникновении некоторого события в файловой системе (например, создания или удаления файла, изменения содержимого каталога и т.д.)? В этом случае может оказаться полезным пакет программincron.

Знакомство с incron

Пакет incron основан на inotify - подсистеме Linux-ядра, которая занимается отслеживанием изменений в файловой системе и сообщает о них заинтересованным приложениям. Название программы произошло от сокращения и объединения названий двух данных подсистем: "INotifyCRON".

Сам по себе пакет incron не очень большой, так, в его состав входят:

  • программа-демон (incrond);
  • программа, обеспечивающая редактирование таблицы событий (incrontab);
  • конфигурационный файл (incron.conf);
  • соответствующие страницы справочника man.

Скачать пакет incron можно на сайте автора - Лукаса Елинека (Lukas Jelinek) или поискать в репозиториях используемого Linux-дистрибутива (в репозиториях Fedora и Debian пакеты incron присутствуют).

С помощью пакета incron можно решать самые разнообразные задачи, начиная с простого мониторинга и сбора статистики об объектах файловой системы и оповещения об изменениях конфигурационных файлов или почтовых ящиков. В более сложных ситуациях incronможет применяться для защиты важных файлов от изменений и автоматического создания резервных копий при изменении заданного набора файлов или каталогов.

 

Использование incron

Поскольку incron является в некоторой степени "родственником" cron, то и принципы использования этих программ и их пользовательский интерфейс также схожи между собой. Каждый пользователь, обладающий правами для работы с incron, обращается к программе incrontab для просмотра или редактирования списка своих правил (задач). Программа-демон (incrond) обрабатывает эти правила, и при наступлении события, указанного в одном из правил, выполняет соответствующую команду.

Для просмотра текущей таблицы правил используется команда incrontab -l, а для редактирования правил - команда incrontab -e. Редактирование выполняется с помощью текстового редактора, определенного в системной переменной EDITOR. Если для работы с таблицей incrontab необходимо выбрать другой редактор, не изменяя значения EDITOR, то в конфигурационный файл /etc/incron.confследует вписать следующую строку:

editor = имя_требуемого_редактора

При этом следует помнить о предупреждении автора программы Лукаса Елинека, который не рекомендует использовать редакторы с графическим интерфейсом (gvim, KEdit, gedit и т.п.) из-за возможных проблем при взаимодействии с X-сервером. Более предпочтительны в данном случае такие редакторы, как vim, emacs, nano и т.д.

С помощью команды incrontab -r пользователь может удалить свою текущую таблицу правил, при этом никаких предупреждений и запросов на подтверждение удаления не выводится, поэтому этой командой следует пользоваться с осторожностью. После добавления всех необходимых правил в таблицу, ее можно сохранить в файле с помощью следующей команды:

incrontab -l > myincrontab.backup

Однако восстанавливать правила в случае удаления таблицы все равно придется вручную.

Демон incrond незамедлительно реагирует на внесение изменений в правила и сразу перезагружает отредактированную таблицу. Но эти изменения не повлияют на команды, которые уже выполняются в текущий момент. Остановить работу текущего активного демонаincrond можно с помощью следующих команд:

  incrond -k
  incrond --kill

После установки пакета incron может случиться так, что никто из пользователей (в том числе и суперпользователь root) не будет иметь прав на работу с таблицами правил. В этом случае потребуется добавить имена учетных записей пользователей, допущенных к работе с incron, в файл /etc/incron.allow. Об этом говорит сайт https://intellect.icu . Иногда встречаются советы удалить файл /etc/incron.allow для того, чтобы все локальные пользователи получили доступ к incron, но этот шаг выглядит чрезмерным и небезопасным (сам автор программы признает это и намеревается в следующих версиях усовершенствовать механизм разрешения доступа).

 

Формат строк правил (задач)

Строки в таблице правил (задач) имеют следующий синтаксис:

<путь_к_файлу>  <маска_флагов_событий>  <команда>
  • &lt;путь_к_файлу&gt; - наилучшим вариантом будет указание полного пути к отслеживаемому файлу или каталогу. Если в записи пути встречаются пробелы, то перед каждым символом пробела должен быть указан символ "обратная косая черта " (\).
  • &lt;маска_флагов_событий&gt; - символьная или числовая маска, представляющая комбинацию отслеживаемых событий. При символьной записи маски флаги различных событий отделяются друг от друга запятыми.
  • &lt;команда&gt; - как и при использовании cron, командой может быть имя выполняемого файла (программы) или имя сценария, который следует выполнить при наступлении заданных маской событий.

Элементы строки отделяются друг от друга произвольным количеством пробелов или табуляций.

В маску могут быть включены флаги событий, перечисленных в таблице 1.

Таблица 1. Список событий, отслеживаемых incron.
СобытиеНазначение

IN_ACCESS

для отслеживания доступа к файлу (чтения из файла).

IN_MODIFY

для отслеживания изменения содержимого файла (записи в файл).

IN_ATTRIB

для отслеживания изменения метаданных файла (прав доступа, меток времени доступа и модификации, расширенных атрибутов и т.д.).

IN_CLOSE_WRITE

для отслеживания закрытия файла, ранее открытого для записи

IN_CLOSE_NOWRITE

для отслеживания закрытия файла, который был открыт без разрешения записи в него.

IN_OPEN

для отслеживания открытия файла.

IN_MOVED_FROM

для отслеживания перемещения файла из наблюдаемого каталога.

IN_MOVED_TO

для отслеживания перемещения файла в наблюдаемый каталог.

IN_CREATE

для отслеживания создания файла/подкаталога в наблюдаемом каталоге.

IN_DELETE

для отслеживания удаления файла/подкаталога в наблюдаемом каталоге.

IN_DELETE_SELF

для отслеживания удаления самого наблюдаемого каталога.

IN_CLOSE

для отслеживания закрытия файла без учета дополнительных условий.

IN_MOVE

для отслеживания перемещения файла/каталога.

IN_ONESHOT

сразу после наступления события запрещается обработка всех последующих событий этого типа, то есть такое событие обрабатывается только один раз.

IN_ALL_EVENTS

определяет комбинацию всех возможных событий.

IN_ONLYDIR

для отслеживания событий, относящихся только к каталогам.

IN_MOVE_SELF

для отслеживания перемещения самого наблюдаемого каталога.

Получить список всех флагов событий, поддерживаемых в текущей версии incron, можно с помощью следующих команд:

  incrontab -t
  incrontab --types

После запуска любой из этих двух команд список флагов, разделенных запятыми, будет направлен на устройство стандартного вывода.

Как указывает автор, сам по себе демон incrond не защищен от проблемы бесконечного зацикливания. То есть, не исключена ситуация, когда некоторое событие инициализировало выполнение соответствующей команды, что опять приводит к наступлению этого же события и т.д. (например, для обработки события типа IN_ATTRIB применяется команда chmod.) Защиту от зацикливания при обработке событий должен взять на себя пользователь, записав в маску специальный флаг IN_NO_LOOP. При этом временно запрещается обработка всех событий для данного правила до тех пор, пока текущее событие не будет полностью обработано. После завершения обработки отслеживание заданных событий будет автоматически возобновлено. Недостатком такого подхода является потеря тех событий, которые были сгенерированы в интервале, когда обработка по данному правилу была запрещена.

В спецификацию команды для удобства могут быть включены следующие шаблоны:

  • $@ - путь в файловой системе, который был указан в таблице правил в элементе &lt;путь_к_файлу&gt;;
  • $# - имя файла, связанного с отслеживаемым событием;
  • $% - флаги событий, представленные в символьной форме;
  • $&amp; - числовое значение маски флагов;
  • $$ - для записи самого символа доллара.
 

Примеры использования incron

В некоторых системах документы для печати направляются не напрямую на принтер, а в специально организованный каталог заданий на печать, именуемый спулингом. Для отслеживания появления заданий в спулинге в incrontab можно написать простое правило:

/tmp/spool IN_CLOSE_WRITE /usr/local/bin/print_spool $@/$#

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

Если суперпользователю root разрешено использовать incron, то можно организовать резервное копирование конфигурационных файлов с историей их изменения (т.е. каждый файл снабжается меткой времени). Для этого "от имени" суперпользователя rootсоздается сценарий incron_bckp.sh (см. листинг 1), который размещается в каталоге /usr/local/sbin.

Листинг 1. Сценарий для резервного копирования измененных конфигурационных файлов
  #!/bin/sh
  mkdir -p /var/backup/incron
  # копирование измененного файла
  cp -p --parents $1 /var/backup/incron
  # переименование скопированного файла для снабжения его меткой времени
  mv /var/backup/incron$1 /var/backup/incron$1_`date +%Y-%m-%d_%H-%M-%S`

Этот сценарий необходимо сделать выполняемым с помощью следующей команды:

chmod 755 /usr/local/sbin/incron_bckp.sh

После этого необходимо открыть таблицу правил, как показано ниже:

incrontab -e

и добавить в нее следующие строки:

  /etc IN_CLOSE_WRITE,IN_MODIFY /usr/local/sbin/incron_bckp.sh $@/$#
  /usr/etc IN_CLOSE_WRITE,IN_MODIFY /usr/local/sbin/incron_bckp.sh $@/$#
  /usr/local/etc IN_CLOSE_WRITE,IN_MODIFY /usr/local/sbin/incron_bckp.sh $@/$#

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

Иногда возникают ситуации, в которых требуется защитить некоторый файл от изменений после записи в него важной информации. Например, ожидается критическое предупреждение от локального почтового сервиса, которое не должно быть утеряно или затерто последующими сообщениями и т.д. При этом операция защиты файла от изменений должна быть выполнена только один раз (после ее завершения соответствующее правило incron теряет смысл). Для выполнения этой задачи можно создать следующую запись вincrontab:

/home/alex/.mail.local/warning.msg IN_CLOSE_WRITE,IN_ONESHOT chmod 440 $@
 

Заключение

Сервис incron позволяет без затруднений организовать обработку событий, происходящих в файловой системе, причем отслеживать события можно избирательно, как для единственного файла, так и для целого дерева подкаталогов. Диапазон отслеживаемых событий достаточно широк: учтены практически все возможные варианты событий в файловой системе.

 

Installing The Package On Lenny / Sid

Because the package is available directly for these releases of Debian you should be able to install it as usual with this:

rt:~# apt-get install incron

rt:~# incrontab  -l
user 'root' is not allowed to use incron

This error may be fixed in one of two ways:

  • Allow the root user to make use of incron:
    • By editing /etc/incron.allow, adding 'root' to it.
  • Allowing all local users the ability to use incron:
    • By removing the file /etc/incron.allow.

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

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

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

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

В заключение, эта статья об incron подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое incron, планирование операций обработки событий в файловой системе и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Операционная система LINUX

создано: 2016-01-31
обновлено: 2024-11-11
270



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Операционная система LINUX

Термины: Операционная система LINUX