Привет. Сегодня рассмотрим ситуацию… Короче, предыстория.
Я саппорчу ебически большой проект на 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 рисовать.
Про все её возможности писать не буду, всё прекрасно гуглится, да и man у неё хороший.
А ещё есть клёвая штука incrond, с помощью неё можно запустить какую-нибудь утилитку, если в каком-то каталоге появился новый файл или произошло другое событие.
Например, можно дёрнуть обработчик этого файла, сделать резервную копию или тегнуть в Telegram. Вариантов масса.
Я однажды видел подобную поделку на каком-то сервере у хостера, где админы сильно упарывались с безопасностью, отслеживали вообще любые изменения в рабочих каталогах и слали алерты на любой чих. С фейками для отнятия почт так боролись. Ну не знаю… По-моему, совсем уж избыточно.
Ладно, не болей, хороших тебе предстоящих выходных и береги себя!








Комментарии