Часто требуется мониторить какой-то системный каталог на предмет создания/изменения/удаления файлов в нем и совершать в зависимости от произошедшего события некие действия: просканить на вирусы, изменить права доступа, послать сообщение, etc.
Наиболее удобным средством для подобного мониторинга мне видится inotify - подсистема ядра Linux, занимающаяся слежением за событиями на уровне файловой системы. Ее возможности как раз соответствуют поставленным парой предложений выше задачам, а также оставляют немалый "запас прочности" на более широкий спектр вопросов. Для работы с inotify следует установить пакет inotify-tools. Это даст возможность воспользоваться в своих скриптах утилитами inotifywait и inotifywatch.
Первая утилита, inotifywait, ждет определенных изменений заданного файла (или файлов в каталоге) и при их возникновении завершает свою работу или пишет в STDOUT лог произошедших действий (если работает в режиме монитора -m). Идеальна для использования в скриптах. К примеру,
#!/bin/bashСей скрипт будет давать права 777 файлу $file при его создании, модификации, перемещении в заданную $TARGET директорию.
INF=/usr/bin/inotifywait
TARGET=/home/share/
$INF -mrqq --format '%w%f' -e close -e moved_to -e create -e modify $TARGET | while read file; do chmod -R 777 $file; done
inotifywatch, вторая утилита пакета, предназначена для мониторинга заданного файла/каталога на предмет определенных действий над оным за заданный промежуток времени с последующей выдачей статистики. Ее выгодно применять для какого-нить дебага нибудь-чего.
Вместо использования inotifywait для мониторинга внутри скрипта, с последующим выполнением какого-то действия, очень удобно использовать демон incron (это отдельный пакет, использующий ту же подсистему inotify), который занимается по сути тем же самым, и при совершении заданного действия запускает указанный ему скрипт. Очень хороший русскоязычный док по работе с incron'ом можно поглядеть тут, имеются и примеры использования. Дабы не увеличивать степень энтропии интернетов, копировать сюда думаю излишне. В качестве примера, сейчас работает вот такой скрипт:
#: /home/interra# cat /etc/incron.d/temp
/home/share/ IN_CREATE,IN_ACCESS,IN_MODIFY /home/interra/temper.sh
#: /home/interra# cat /home/interra/temper.sh
#!/bin/bash
/bin/chmod -R 777 /home/share/
Также можно, аналогично работе с cron, использовать утилиту incrontab для записи правил срабатывания incron-a. "Внутрь" его записывается то же, что сохраняется в /etc/incron.d/.
А если в двух словах - работа с incron абсолютно идентична работе с cron. Вообще, incron = inotify cron.
А если в двух словах - работа с incron абсолютно идентична работе с cron. Вообще, incron = inotify cron.
Комментариев нет:
Отправить комментарий