В ядре Linux, похоже, запрятано до хрена интересных возможностей. Не знаю, есть ли там Святой Грааль и Общая теория всего, но вот, нашел сначала упоминания в Linux Format, а потом мануал на Хабре. Немного его переработал под свои нужды.
Выделенное синим - копия с хабра
Что такое inotify
Inotify — это подсистема ядра Linux, которая позволяет получать уведомления об изменениях в файловой системе. Т.е. простыми словами — эта штука дает нам информацию о создании или изменении любого файла или директории в используемой файловой системе.
Проще всего задействовать ее для своих целей при помощи демона
incronставится очень просто:
sudo aptitude install incron
После установки первое - найти файл
/etc/incron.allow и вписать в него свое username (можно золотыми буквами)
чтобы разрешить себе любимому использовать
incronЗадания для демона аналогично cron'у определяются командой
incrontab -e Формат файла:
<путь для слежения> <Событие> <команда/скрипт>
Особенности:
в отличие от
crontab здесь не работает установка окружения
DISPLAY=:0.0
т.е. не получится запускать приложения X-сервера (программы с GUI интерфейсом), по крайней мере - без выпендрежа
incron реагирует на следующие события:
IN_ACCESS — К файлу обращались (чтение)
IN_ATTRIB — Изменены метаданные (права, дата создания/редактирования, расширенные атрибуты, и т.д.)
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 — Файл был открыт
Также в команде можно использовать следующие внутренние переменные (очень удобные для логирования ИМХО):
$$ знак $
$@ объект нашей слежки (директория)
$# имя созданного файла
$% флаг события (текстом)
$& флаг события (цифрой)
Для чего это можно пристегнуть:1. Автоматическое резервное копирование важных файлов после их изменения
2. Автоматический рестарт различных служб (демонов) после редактирования их конфигов
и самое интересное:3. Выполнение пользовательских скриптов
Например, я написал скрипт, который запускается при появлении в отслеживаемой папке текстового файлика со ссылками
Скрипт скачивает из инета веб-страницы по ссылкам (заточено под nnm.ru, можно сделать для многих других сайтов). Страницы скачиваются специально без картинок. Можно сделать и зеркало выбранных страниц или сайта с картинками -
man wget - мне нужно было именно без картинок, для уменьшения объема
По окончании скачивания веб-страницы тем же скриптом автоматически зипуются, а затем отправляются на определенный почтовый ящик
Можно сделать и автоматическое удаление накопившегося хлама - пока еще не доделано
Зачем оно надо:Например, уехали вы на дачу на выходные, а инет там дорогой, потому что через GPRS
Можно получать на почту новости с любимого сайта, или трекера, не чувствуя себя оторванным от мира
Скрипт (Замените <фрагменты> вашими данными):
!#/bin/bash
sleep 10; cp /home/<username>/mail/`date +%d_%m_%y`.txt /home/<username>/tmp/`date +%d_%m_%y`.txt
cd /
cd /home/<username>/tmp/
sleep 5; wget -p -i `date +%d_%m_%y`.txt --http-user=<nnm.ru_login> --http-password=<nnm.ru_password> --user-agent="Mozilla/5.0 (compatible; Konqueror/3.0.0/10; Linux)" && \
sleep 10; zip -r `date +%d_%m_%y`.zip ~/tmp/nnm.ru/blogs/* && \
sleep 10; sendemail -f <ваш_логин>@mail.ru -t <ВАШ>@<второй_почтовый.ящик> -s smtp.mail.ru:25 -xu <Ваш логин к mail.ru> -xp <ваш_пароль_к_mail.ru> -u `date +%d_%m_%y` -m "`date +%d_%m_%y`" -a ~/tmp/`date +%d_%m_%y`.zip
строка в
incrontab/home/<username>/mail/ IN_CREATE /home/<username>tmp/wget_html.sh