Лекция
Привет, Вы узнаете о том , что такое incron, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое incron, планирование операций обработки событий в файловой системе , настоятельно рекомендую прочитать все из категории Операционная система LINUX.
Большинству пользователей Linux хорошо знакома удобная утилита cron, предназначенная для планирования и выполнения разнообразных операций в заданное время. Но что, если действие должно быть выполнено не при наступлении определенного момента времени, а при возникновении некоторого события в файловой системе (например, создания или удаления файла, изменения содержимого каталога и т.д.)? В этом случае может оказаться полезным пакет программincron.
Пакет incron основан на inotify - подсистеме Linux-ядра, которая занимается отслеживанием изменений в файловой системе и сообщает о них заинтересованным приложениям. Название программы произошло от сокращения и объединения названий двух данных подсистем: "INotifyCRON".
Сам по себе пакет incron не очень большой, так, в его состав входят:
Скачать пакет incron можно на сайте автора - Лукаса Елинека (Lukas Jelinek) или поискать в репозиториях используемого Linux-дистрибутива (в репозиториях Fedora и Debian пакеты 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, но этот шаг выглядит чрезмерным и небезопасным (сам автор программы признает это и намеревается в следующих версиях усовершенствовать механизм разрешения доступа).
Строки в таблице правил (задач) имеют следующий синтаксис:
<путь_к_файлу> <маска_флагов_событий> <команда>
Элементы строки отделяются друг от друга произвольным количеством пробелов или табуляций.
В маску могут быть включены флаги событий, перечисленных в таблице 1.
Событие | Назначение |
---|---|
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. При этом временно запрещается обработка всех событий для данного правила до тех пор, пока текущее событие не будет полностью обработано. После завершения обработки отслеживание заданных событий будет автоматически возобновлено. Недостатком такого подхода является потеря тех событий, которые были сгенерированы в интервале, когда обработка по данному правилу была запрещена.
В спецификацию команды для удобства могут быть включены следующие шаблоны:
В некоторых системах документы для печати направляются не напрямую на принтер, а в специально организованный каталог заданий на печать, именуемый спулингом. Для отслеживания появления заданий в спулинге в incrontab можно написать простое правило:
/tmp/spool IN_CLOSE_WRITE /usr/local/bin/print_spool $@/$#
Теперь после завершения записи и закрытия файла в спулинге будет инициализирован сценарий, позволяющий выполнить печать заданного файла. Имя файла (с указанием полного пути к нему) передается в сценарий, как аргумент, при помощи ранее рассмотренных шаблонов.
Если суперпользователю root разрешено использовать incron, то можно организовать резервное копирование конфигурационных файлов с историей их изменения (т.е. каждый файл снабжается меткой времени). Для этого "от имени" суперпользователя rootсоздается сценарий incron_bckp.sh (см. листинг 1), который размещается в каталоге /usr/local/sbin.
#!/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 incronrt:~# incrontab -l user 'root' is not allowed to use incronThis 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
Комментарии
Оставить комментарий
Операционная система LINUX
Термины: Операционная система LINUX