Гид по технологиям

Установка и использование incron на Debian 9 (Stretch)

• 5 min read • Серверы • Обновлено 21 Nov 2025
Incron на Debian 9: установка и применение
Incron на Debian 9: установка и применение

Пререквизиты

  • Права администратора (root) в системе. Все команды в этом руководстве предполагают выполнение от root.
  • В примерах используется редактор «nano». Вы можете заменить его на любимый редактор или установить nano:
apt-get install nano

Установка incron

Incron доступен в репозитории Debian, поэтому установите пакет командой:

apt-get install incron

Процесс установки похож на обычную установку пакета apt. Пример вывода установки показан на скриншоте ниже.

Установка Incron на Debian 9 — вывод 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‑скриптов:

  1. Сначала протестируйте триггер с простой командой, выводящей параметры в лог.
  2. Используйте абсолютные пути для команд (например, /usr/sbin/service).
  3. Ограничьте область мониторинга: вместо / наблюдайте конкретный каталог.
  4. Учитывайте атомарность операций редакторов (временные файлы, .swp и т.д.).
  5. Защитите от петель: не записывайте в мониторимый каталог из исполняемого скрипта; используйте IN_NO_LOOP или записывайте результаты в другой каталог.
  6. Лимитируйте частоту запусков: если команда может запуститься слишком часто, добавьте 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) для сложных задач.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро