Установка и использование incron на Debian 8 (Jessie)
Кратко
incron позволяет запускать команды при событиях файловой системы (изменение, создание, удаление и т.д.), а не по расписанию, как cron. В этой инструкции показано, как установить incron на Debian 8, настроить права доступа, создать первые задачи и безопасно эксплуатировать систему с практическими примерами и советами по отладке.
О чём эта статья
- Установка incron из репозитория Debian
- Управление правами доступа (/etc/incron.allow и /etc/incron.deny)
- Формат incrontab и доступные события inotify
- Практические примеры: перезапуск Apache при изменении конфигурации
- Безопасность, отладка, альтернативы и чеклисты для ролей
Важное заметка
Не запускайте команды из задания incron, которые записывают в ту же директорию, которую вы мониторите: это приведёт к рекурсивным событиям и может создать нагрузку или цикл.
1. Требования
- Права администратора (root) в Shell. Все команды в руководстве выполняются от root.
- Я буду использовать редактор nano; вы можете заменить его на предпочитаемый редактор или установить nano:
apt-get install nano.
2. Установка incron
Incron доступен в репозитории Debian, поэтому установите его командой:
apt-get install incronПроцесс установки похож на стандартную установку пакетов apt.

3. Права доступа и файлы allow/deny
incron использует файлы /etc/incron.allow и /etc/incron.deny по аналогии с ISC cron. Поведение:
- Если существует
/etc/incron.allow, только перечисленные в нём пользователи могут использовать incron. - Иначе, если существует
/etc/incron.deny, только пользователи, НЕ перечисленные в нём, могут использовать incron. - Если ни один файл не существует, то все пользователи могут использовать incron (по умолчанию небезопасно).
Чтобы разрешить root использовать incron, либо удалите /etc/incron.allow (не рекомендуется), либо добавьте в него строку root:
rm -f /etc/incron.allow # не рекомендуется
nano /etc/incron.allowДобавьте строку:
rootПосле корректной настройки файла попытка выполнить incrontab -l не будет выдавать сообщение об отказе в доступе.
4. Основные команды incron
- Просмотр задач:
incrontab -l - Редактирование задач:
incrontab -e - Удаление всех задач текущего пользователя:
incrontab -r - Просмотр man-страницы:
man incrontabиman 5 incrontab
Пример вывода ошибок при отсутствии прав:
server1:~# incrontab -l
user 'root' is not allowed to use incron
server1:~#После добавления root в /etc/incron.allow:
server1:~# incrontab -l
no table for root
server1:~#5. Формат incrontab и события inotify
Строка incrontab имеет формат:
— файл или директория. Для директории отслеживаются события только для файлов непосредственно в ней (не рекурсивно).— набор событий (см. список ниже).— команда, выполняемая при событии. В команде можно использовать подстановки (см. ниже).
Доступные события (наиболее важные):
IN_ACCESS File was accessed (read)
IN_ATTRIB Metadata changed (permissions, timestamps, extended attributes, etc.)
IN_CLOSE_WRITE File opened for writing was closed
IN_CLOSE_NOWRITE File not opened for writing was closed
IN_CREATE File/directory created in watched directory
IN_DELETE File/directory deleted from watched directory
IN_DELETE_SELF Watched file/directory was itself deleted
IN_MODIFY File was modified
IN_MOVE_SELF Watched file/directory was itself moved
IN_MOVED_FROM File moved out of watched directory
IN_MOVED_TO File moved into watched directory
IN_OPEN File was openedДополнительные символы маски:
IN_ALL_EVENTS Всe вышеуказанные события (битовая маска)
IN_MOVE IN_MOVED_FROM + IN_MOVED_TO
IN_CLOSE IN_CLOSE_WRITE + IN_CLOSE_NOWRITE
IN_DONT_FOLLOW Не разыменовывать символические ссылки
IN_ONESHOT Мониторить путь только для одного события
IN_ONLYDIR Срабатывать только если путь — директория
IN_NO_LOOP Отключает мониторинг до завершения обработки текущего событияПодстановки в :
$$ доллар (символ $)
$@ следимый путь
$# имя файла, связанного с событием (если есть)
$% флаги события в текстовом виде
$& флаги события в числовом видеЕсли вы следите за директорией, то $@ — путь директории, а $# — имя файла внутри неё. Если следите за файлом, то $@ — полный путь к файлу, а $# пуст.
6. Быстрый тест wildcards
Чтобы увидеть, как подстановки разворачиваются, добавьте временное правило:
incrontab -eДобавьте строку:
/tmp/ IN_MODIFY echo "$ $@ $# $% $&"Затем измените файл в /tmp и посмотрите /var/log/syslog:
tail /var/log/syslogВы увидите записи вида:
Sep 16 10:14:35 server1 incrond[1199]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Sep 16 10:14:39 server1 incrond[1199]: (root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")Это показывает, как заменяются $@, $#, $%, $&.
7. Практический пример: перезапуск Apache при изменении конфигурации
Добавим два правила: для основного файла конфигурации и для директории виртуальных хостов:
incrontab -eВставьте:
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/sites-available/ IN_MODIFY /usr/sbin/service apache2 restartПосле этого изменение конфигурации Apache приведёт к перезапуску службы. Для проверки посмотрите /var/log/syslog.
Важно: избегайте того, чтобы выполняемая команда писала в ту же директорию, иначе вы получите цикл событий.
8. Отладка и логирование
- Логи incron пишутся в
/var/log/syslog(или в systemd-journal). Там видно, какая команда была запущена и с какими аргументами. - Если задача не запускается, проверьте права в
/etc/incron.allowи/etc/incron.deny. - Проверьте, что путь в incrontab корректен и существуют бинарники, которые вы вызываете (например,
/usr/sbin/service). - Тестируйте команды вручную под тем же пользователем, от которого работает incron.
9. Безопасность и жесткие рекомендации
- Не давайте доступ непроверенным пользователям в
/etc/incron.allow. - Избегайте запуска необработанных входных данных в командах incron; экранируйте переменные и используйте проверенные скрипты.
- Не помещайте выполняемые скрипты в директории, которые вы мониторите.
- Если команда выполняет перезапуск сервисов, добавьте проверку конфигурации перед перезапуском (например,
apache2ctl configtest && service apache2 restart).
Пример безопасного правила для Apache:
/etc/apache2/apache2.conf IN_MODIFY /usr/local/sbin/incron-apache-reload.shгде /usr/local/sbin/incron-apache-reload.sh содержит проверку конфигурации и логирование, а не просто service apache2 restart.
10. Альтернативные подходы и когда incron не подходит
Когда incron не лучшая опция:
- Если нужен рекурсивный мониторинг большого дерева каталогов — incron не рекурсивен; используйте systemd.path, inotifywait + find/entr или agent-решения.
- Для аудита безопасности или подробного журналирования доступа лучше использовать auditd.
- Для реакции на изменения в конфигурации сервисов в современных системах удобны systemd path units (systemd.path) с единицами service.
Альтернативы:
- inotifywait (из пакета inotify-tools) — утилита для одноразового или скриптового мониторинга.
- entr — утилита для перезапуска команды при изменении списка файлов.
- systemd.path — декларативное решение в systemd для запуска unit при изменении файлов.
Краткая ментальная модель: incron — это cron, где «время» заменено «событием файловой системы».
11. Чеклист для ролей
Системный администратор
- Установить incron:
apt-get install incron. - Проверить
/etc/incron.allowи/etc/incron.deny. - Создать надёжные wrapper-скрипты для команд, вызываемых incron.
- Настроить ротацию логов и мониторинг syslog/journal.
Разработчик/DevOps
- Тестировать команды отдельно под тем же пользователем.
- Добавить проверку конфигурации перед перезапуском сервиса.
- Избегать записи в мониторимую директорию.
Оператор/QA
- Создать тестовые файлы и проверить, что событие срабатывает и команда выполняется.
- Проверить, что нет «петель» записей в мониторимую директорию.
12. Мини-процедура внедрения (SOP)
- Установить incron.
- Добавить в
/etc/incron.allowтолько необходимых пользователей. - Создать wrapper-скрипты в
/usr/local/sbinс проверками и логированием. - Добавить правила через
incrontab -e. - Протестировать изменения и мониторить
/var/log/syslog. - Документировать правила и ответственных.
13. Примеры шаблонов и тестовые случаи
Шаблон безопасной команды перезапуска Apache:
/usr/local/sbin/incron-apache-reload.shСодержимое /usr/local/sbin/incron-apache-reload.sh (пример):
#!/bin/sh
LOG=/var/log/incron-apache-reload.log
date >> $LOG
if apache2ctl configtest >/dev/null 2>&1; then
echo "Config OK, restarting" >> $LOG
service apache2 restart >> $LOG 2>&1
else
echo "Config test failed, not restarting" >> $LOG
fiТестовые случаи:
- Изменить
/etc/apache2/apache2.conf— ожидать перезапуск (и запись в лог). - Создать временный файл в мониторимой директории — убедиться, что временные файлы не запускают нежелательных действий.
- Убедиться, что запись в мониторимую директорию от wrapper-скрипта не создаёт цикла.
14. Матрица рисков и смягчения
- Риск: несанкционированный доступ к incron — Смягчение: ограничить
/etc/incron.allow. - Риск: цикл событий из-за записи в мониторируемую директорию — Смягчение: писать логи в отдельную директорию или в /var/log.
- Риск: некорректная конфигурация вызывает постоянные рестарты — Смягчение: всегда вызывать
configtestперед рестартом.
15. Критерии приёмки
- incron установлен и работает под нужным пользователем.
/etc/incron.allowсодержит только уполномоченных пользователей.- Для каждого правила существует wrapper-скрипт с проверками.
- Логи записываются и проверены при тестовых изменениях.
16. Глоссарий (1 строка термина)
- inotify: ядровой интерфейс Linux для уведомлений о событиях файловой системы.
- incron: демон и утилиты, которые запускают команды при событиях inotify.
- incrontab: файл задач incron, аналог crontab.
17. Полезные ссылки
- Debian: http://www.debian.org
- incron (официально): http://inotify.aiken.cz/?section=incron&page=about&lang=en
Итог
incron — удобный инструмент для реактивного управления системой на основе событий файловой системы. Он прост в установке и настройке, но требует аккуратной политики доступа и тестирования wrapper-скриптов, чтобы избежать циклов и проблем с производительностью.
Ключевые действия: установить пакет, настроить /etc/incron.allow, писать безопасные wrapper-скрипты и тестировать правила через /var/log/syslog.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента