Привет. Сегодня рассмотрим ситуацию… Короче, предыстория.

Я саппорчу ебически большой проект на PHP, в нём миллион файлов и папок. Есть некий файл с выгрузкой для бухов, который генерится по крону и куда-то складывается.

Знаем точно, что он складывается как раз в тот ебический проект с миллионом файлов. Но не знаем, как называется сам файл и где конкретно он сохраняется.

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

Естественно, нет документации, нет контактов с разработчиками, нет НИЧЕГО, у кого можно что-то узнать. Это обычная практика в IT: вот вам проект, ебитесь сами. В общем, приступаем к поискам.

Лазить по каждой папке я не буду, тем более изучать конфиги и насиловать find. Я стараюсь не делать то, что мне не нравится. А вот накидать Bash-скрипт — это прям хлебом не корми, дай заговнокодить.

Ладно, давай к делу. Отбрасываем все стандартные методы и скрам-практики, ставим пакет inotify-tools и накидываем скрипт:

inotifywait -r -m -e create /var/www/bashdays | while read line; do
    echo "Created: $line"
done

Да, мысль ты правильно понял: я сделал что-то наподобие снифера, который будет рекурсивно перехватывать события создания файла или папки и выводить нужную мне информацию на экран. Проще говоря, как только в папках с проектом что-то создастся, оно закричит и покажет мне то, что создалось.

Что круто, мониторинг осуществляется рекурсивно: достаточно указать одну папку, а все подпапки автоматически попадут под колпак.

Запускаем скрипт. В соседней вкладке запускаем команду, которая генерит этот вонючий файл с выгрузкой, и ждём. Совсем скоро на экране я получаю такую запись:

Created: /var/www/bashdays/core/modx/var/tmp CREATE 1C_b2b_prices.csv

Опа, задача решена, путь до файла определён, как и его имя. Пишем комментарий к задаче, передвигаем её в Done и трекаем восемь часов потраченного времени.

Вообще игрушка inotify-tools достаточно мощная, можно мониторить не только создание файлов, но и кучу ещё всего. При должном подходе можно свой собственный мониторинг собрать, выгружать в Prometheus и соплю в Grafana рисовать.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Я лишь показал, как применил эту штуку на реальной задаче и сэкономил кучу времени. А дальше тебе карты в руки.

Про все её возможности писать не буду, всё прекрасно гуглится, да и man у неё хороший.

А ещё есть клёвая штука incrond, с помощью неё можно запустить какую-нибудь утилитку, если в каком-то каталоге появился новый файл или произошло другое событие.

Например, можно дёрнуть обработчик этого файла, сделать резервную копию или тегнуть в Telegram. Вариантов масса.

Я однажды видел подобную поделку на каком-то сервере у хостера, где админы сильно упарывались с безопасностью, отслеживали вообще любые изменения в рабочих каталогах и слали алерты на любой чих. С фейками для отнятия почт так боролись. Ну не знаю… По-моему, совсем уж избыточно.

Ладно, не болей, хороших тебе предстоящих выходных и береги себя!