Как найти местоположение файла, узнать его имя и убедиться, что файл вообще пытается создаться после запуска cron.
Я саппортю очень большой проект на php, в нем миллион файлов и папок. Есть некий файл с выгрузкой для бухов, который генерится по крону и куда-то складывается.
Знаем точно, что он складывается как раз в тот огромный uпроект с миллионом файлов. Но не знаем как называется сам файл и где конкретно он сохраняется.
Задача: найти местоположение файла с выгрузкой, узнать как называется этот файл и убедиться что файл вообще пытается создаться после запуска крона.
Естественно нет документации, нет контактов с разработчиками, нет НИЧЕГО у кого можно что-то узнать. Это обычная практика в айти, вот вам проект, а дальше сами. В общем приступаем к поискам.
Лазить по каждой папке я не буду, тем более изучать конфиги и прикасаться к find. Я стараюсь не делать, то что мне не нравится. А вот накидать bash скрипт, это прям хлебом не корми.
Ладно, давай к делу. Отбрасываем все стандартные методы и скрам практики, ставим пакет inotify-tools и накидываем скрипт.
inotifywait -r -m -e create /var/www/bashdays | while read line; do
echo "Created: $line"
done
inotify-tools - это набор утилит командной строки для мониторинга файловой системы в реальном времени на основе inotify, механизма ядра Linux, который позволяет приложениям реагировать на изменения файлов, каталогов или метаданных в файловой системе.
Да, мысль ты правильно понял, я сделал что-то на подобии сниффера, который будет рекурсивно перехватывать события создания файла/папки и выводить нужную мне информацию на экран. Проще говоря, как только в папках с проектом что-то создастся, оно закричит и покажет мне, то что создалось.
➕ Подпишись на BashDays в телеграм
Что круто, мониторинг осуществляется рекурсивно, достаточно указать одну папку, а все подпапки автоматически попадут под колпак.
Запускаем скрипт. В соседней вкладке запускаем команду, которая генерит этот файл с выгрузкой и ждем. Совсем скоро на экране я получаю такую запись:
Created: /var/www/bashdays/core/modx/var/tmp CREATE 1C_b2b_prices.csv
Опа, задача решена, путь до файла определен, как и его имя. Пишем комментарий к задаче, передвигаем её в Done и трекаем 8 часов потраченного времени.
Вообще игрушка inotify-tools достаточно мощная, можно мониторить не только создание файлов, но и кучу еще всего. При должном подходе, можно свой собственный мониторинг собрать, выгружать в prometheus и график в grafana рисовать.
Про все ее возможности писать не буду, всё прекрасно гуглится, да и man у нее хороший. Я лишь показал, как применил эту штуку на реальной задаче и сэкономил кучу времени. А дальше тебе карты в руки.
А еще есть клевая штука incrond, с помощью неё можно запустить какую-нибудь утилитку, если в каком-то каталоге появился новый файл или произойдет другое событие.
Например, можно дернуть обработчик этого файла, сделать резервную копию, или тегнуть в телеграм. Вариантов масса.
incrond (inotify cron daemon) - это демон для системы Linux, который обеспечивает возможность запуска задач (команд или скриптов) в ответ на события файловой системы, используя механизм inotify. Он подобен стандартному демону cron, но вместо использования времени он реагирует на изменения файлов и каталогов.
Я однажды видел подобную поделку на каком-то сервере у хостера, где админы сильно упарывались с безопасностью, отслеживали вообще любые изменения в рабочих каталогах и слали алерты на любой чих. С фейками для отнятия почт так боролись. Ну не знаю… по моему совсем уж избыточно.
Ладно, не болей, хороших тебе выходных и береги себя!