Установка и использование incron на Debian 9 (Stretch)
Пререквизиты
- Права администратора (root) в системе. Все команды в этом руководстве предполагают выполнение от root.
- В примерах используется редактор «nano». Вы можете заменить его на любимый редактор или установить nano:
apt-get install nanoУстановка incron
Incron доступен в репозитории Debian, поэтому установите пакет командой:
apt-get install incronПроцесс установки похож на обычную установку пакета apt. Пример вывода установки показан на скриншоте ниже.

Основная идея и когда использовать
Incron — это инструмент, похожий на cron, но триггером для команд служат события файловой системы (вместо времени). Типичные сценарии:
- Автоматическая перезагрузка сервиса при изменении конфигурации.
- Обработка новых загруженных файлов (конвертация, проверка, перемещение).
- Синхронизация каталога в реальном времени.
Когда incron может не подойти:
- Если задача должна выполняться строго по расписанию — используйте cron или systemd timers.
- Для массовой обработки очень большого числа событий (например, миллионы файлов) inotify/incron может перегружаться.
- Когда требуется гарантированная доставка событий в очереди — лучше использовать очередь задач (RabbitMQ, Kafka).
Использование incron — базовые команды
Утилита incrontab позволяет просмотреть, отредактировать и удалить таблицы событий:
- Просмотр:
incrontab -l - Редактирование:
incrontab -e - Удаление:
incrontab -r
Подробно — в man:
man incrontabРазрешения: /etc/incron.allow и /etc/incron.deny
Если присутствует файл /etc/incron.allow, использовать incron могут только перечисленные в нём пользователи. Если существует /etc/incron.deny, то использовать incron могут все, кроме перечисленных в deny. Если ни один файл не существует — доступ открыт всем. Поведение можно изменить в конфигурации.
Если вы хотите запускать incrontab от root, рекомендуется добавить root в /etc/incron.allow (без удаления файла):
nano /etc/incron.allowДобавьте строку:
rootЕсли файл отсутствует, при попытке использовать incrontab вы увидите ошибку:
server1:~# incrontab -l
user 'root' is not allowed to use incronПосле добавления root всё заработает:
server1:~# incrontab -l
no table for rootФормат incrontab
Формат строки в incrontab прост:
— файл или директория, за которой ведётся слежение. Для директории отслеживаются файлы в ней (не рекурсивно).— набор событий (см. ниже).— команда, выполняемая при срабатывании. В командной строке доступны подстановки (wildcards).
Пример создания таблицы:
incrontab -eи внутри файла:
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/sites-available/ IN_MODIFY /usr/sbin/service apache2 restartПосле сохранения incrond будет отслеживать указанные пути и перезапускать Apache при изменениях.
Список основных событий (масок)
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 — маска, объединяющая все события. IN_MOVE = IN_MOVED_FROM | IN_MOVED_TO, IN_CLOSE = IN_CLOSE_WRITE | IN_CLOSE_NOWRITE.
Дополнительные символы:
IN_DONT_FOLLOW Don't dereference pathname if it is a symbolic link
IN_ONESHOT Monitor pathname for only one event
IN_ONLYDIR Only watch pathname if it is a directoryЕсть специальный IN_NO_LOOP — отключает мониторинг событий, пока текущее событие полностью не обработано (до выхода дочернего процесса). Это помогает предотвратить зацикливания при сценариях, когда выполняемая команда сама изменяет мониторимый каталог.
Подстановки в команде
В команде можно использовать следующие подстановки:
$$ dollar sign
$@ watched filesystem path
$# event-related file name
$% event flags (textual)
$& event flags (numeric)Пример: если мониторится директория, то $@ — это путь к директории, а $# — имя файла, вызвавшего событие.
Пример тестового задания, чтобы увидеть подстановки в логах:
incrontab -eДобавьте строку:
/tmp/ IN_MODIFY echo "$$ $@ $# $% $&"Создайте или измените файл в /tmp, затем посмотрите /var/log/syslog:
tail /var/log/syslogВы увидите записи типа:
Jan 10 13:52:35 server1 incrond[1012]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")В примере $@ стал /tmp, $# — имя файла, $% — флаги в текстовом виде, $& — числовое представление.
Практические советы и методология для надёжных incron задач
Мини‑методология для создания устойчивых incron‑скриптов:
- Сначала протестируйте триггер с простой командой, выводящей параметры в лог.
- Используйте абсолютные пути для команд (например,
/usr/sbin/service). - Ограничьте область мониторинга: вместо
/наблюдайте конкретный каталог. - Учитывайте атомарность операций редакторов (временные файлы, .swp и т.д.).
- Защитите от петель: не записывайте в мониторимый каталог из исполняемого скрипта; используйте
IN_NO_LOOPили записывайте результаты в другой каталог. - Лимитируйте частоту запусков: если команда может запуститься слишком часто, добавьте debounce (например, скрипт, который ставит блокировку по файлу с TTL).
Пример простого debounce скрипта:
#!/bin/sh
LOCKFILE=/var/run/incron-restart.lock
if [ -e "$LOCKFILE" ] && [ $(expr $(date +%s) - $(cat $LOCKFILE)) -lt 30 ]; then
exit 0
fi
date +%s > "$LOCKFILE"
/usr/sbin/service apache2 restartЭтот скрипт не позволит перезапускать Apache чаще, чем раз в 30 секунд.
Безопасность и жёсткие настройки
Important: Incron запускает команды от имени пользователя, чей incrontab был отредактирован. Для root это означает высокие привилегии — будьте осторожны.
Рекомендации:
- Не давать доступ в
/etc/incron.allowненадёжным пользователям. - Минимизировать набор путей и привилегий. По возможности запускать обработчики от ограниченных пользователей через sudo с явно заданными командами.
- Не храните секреты в командах incrontab.
- Используйте
IN_ONLYDIRи явные маски, чтобы снизить вероятность ложных срабатываний.
Отладка и типовые ошибки
- Нет срабатываний — проверьте
/var/log/syslogи права на/etc/incron.allow. - Команда не выполняется — укажите абсолютный путь к исполняемому файлу; проверьте переменные окружения (в incron их может не быть).
- Петля изменений — проверьте, не изменяет ли выполняемый скрипт мониторимый каталог. Используйте
IN_NO_LOOPили выводите логи в другое место.
Пример просмотра логов:
tail -f /var/log/syslog | grep incrondРоль‑ориентированные чек‑листы
Администратор (root):
- Убедиться, что root добавлен в
/etc/incron.allow. - Проверить, что incron установлен и сервис incrond запущен.
- Подготовить абсолютные пути в incrontab.
- Настроить журналы и ротацию логов.
DevOps / инженер сопровождения:
- Протестировать сценарии в тестовой среде.
- Добавить debounce/блокировки для многократных срабатываний.
- Настроить мониторинг SLI/SLO на время реакции сервиса после изменения конфигурации.
Разработчик скриптов:
- Писать idempotent‑скрипты (без побочных эффектов при повторном запуске).
- Логировать входные параметры и ошибки в отдельный лог.
Критерии приёмки
- При изменении указанного файла/каталога incron запускает команду и она завершается успешно (код 0).
- В
/var/log/syslogприсутствует запись о запуске команды и о её результате. - Сценарий не вызывает рекурсий и не повышает нагрузку сервера существенно.
Примеры альтернатив
Если incron не подходит, рассмотрите:
- systemd path units — следят за файлами/каталогами и интегрируются с systemd (рекомендуется на системах с systemd).
- inotifywait (часть inotify-tools) — для скриптовой обработки и более гибкой логики.
- Использовать файловую очередь/сервер событий для масштабируемых решений.
Тесты и приёмка
Тестовые случаи:
- Изменение файла должно создать запись в syslog и вызвать команду.
- Создание временного файла (editor .swp) не должно вызывать нежелательных действий — проверьте фильтрацию по имени.
- Скрипт с debounce не запускается чаще установленного интервала.
Удаление incron задач
Чтобы удалить все задачи текущего пользователя:
incrontab -rПример вывода:
server1:~# incrontab -r
removing table for user 'root'
table for user 'root' successfully removedПолезные ссылки
Краткое резюме
Incron — удобный инструмент для автоматической реакции на события файловой системы. На Debian 9 его просто установить и настроить, но важно учитывать безопасность, избегать петель и тестировать сценарии в контролируемой среде. Используйте debounce и абсолютные пути, и рассматривайте альтернативы (systemd path, inotifywait) для сложных задач.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента