TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #958 1.24K
👀 inotifywait: реакция на изменения файлов без cron

Иногда нужно выполнить действие сразу после изменения файла или каталога. Например:

• изменился конфиг - перезапустить сервис
• появился новый файл - обработать его
• загрузили архив - распаковать
• изменился сертификат - перечитать nginx
• в каталог упал лог - отправить уведомление

Первое решение, которое часто приходит в голову - cron. Но cron работает по расписанию. Он не реагирует на событие сразу, а просто периодически проверяет состояние. Для событий в файловой системе удобнее использовать inotifywait.

▪️ Установка:


apt install inotify-tools


▪️ Посмотреть изменения файла:


inotifywait -m /etc/nginx/nginx.conf


Ключ -m включает постоянное наблюдение.

Пример вывода:


/etc/nginx/nginx.conf MODIFY


▪️ Следить за каталогом:


inotifywait -m /var/www


Рекурсивно:


inotifywait -m -r /var/www


Можно выбрать конкретные события:


inotifywait -m -e create,modify,delete /var/www


▪️ Простой пример: перезагрузить nginx после изменения конфига.


while inotifywait -e modify /etc/nginx/nginx.conf; do
nginx -t && systemctl reload nginx
done


Смысл простой:

• ждем изменение файла
• проверяем конфиг
• если всё нормально - reload nginx
• снова ждем следующее изменение

▪️ Еще пример: обработать новые файлы в каталоге.


inotifywait -m -e close_write --format '%w%f' /data/incoming |
while read -r file; do
echo "new file: $file"
/opt/scripts/process-file.sh "$file"
done


Почему close_write, а не просто create? Потому что файл может появиться, но запись в него еще не закончилась. close_write срабатывает, когда файл уже записан и закрыт.

⚠️ inotifywait - не замена очередям, брокерам сообщений и нормальной event-driven архитектуре. У него есть лимиты ядра, события можно потерять при перегрузке, а рекурсивное наблюдение за огромными деревьями может быть тяжелым. Проверить лимиты можно так:


sysctl fs.inotify.max_user_watches
sysctl fs.inotify.max_user_instances


#linux #inotify

🧑‍💻 NetworkAdmin
  • 👍 4
More from @networkadminru
  1. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
  2. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
  3. Sep 23, 2026💻 Как жестко перезагрузить linux, когда обычный reboot уже не помогает Иногда сервер зави…
  4. Sep 22, 2026🌚 watch: простая динамическая диагностика в терминале Иногда не нужен отдельный мониторин…
  5. Sep 21, 2026👌 Firewall default deny: как внедрять без внезапного отрезания доступа Идея простая: разр…
  6. Sep 18, 2026🖥 Windows зависла на "Подготовке Windows": как проверить состояние удаленно Типичная ситу…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →