У меня есть программа, которая для каждого запуска генерирует новый файл журнала. Чтобы посмотреть, что происходит, я хотел бы tail -f
журнал - единственная проблема в том, что я на самом деле не знаю имя файла заранее.
Итак, есть ли способ отслеживать все файлы, которые соответствуют определенному шаблону (shell glob)? Я думаю, я мог бы легко написать что-то вроде этого, но мне интересно, есть ли уже решение.
решение1
Я не думаю, что есть прямой способ сделать это, tail
не зная имени. Если бы вы его знали, то это tail --follow=name --retry
сработало бы, и файл бы подождал, пока появится, а затем начал бы его отслеживать.
Я бы предложил написать небольшой скрипт оболочки, который будет inotifywait
следить за появлением файла, а затем начнет tail -f
следовать за ним.
решение2
Если вы заранее не знаете имя файла:
- определитесь с именем файла, например
foo.log
- посмотрите этот файл:
tail -F foo.log
(неважно, существует foo или нет) - используйте инструмент для отслеживания изменений файлов в каталоге и выполните команду
Для команды:
- переместите новый файл, чтобы перезаписать foo.log
mv the_new_file_which_appeared foo.log
(если журнал приложения открывается один раз, это будет работать нормально) - или просто символическая ссылка:
ln -s the_new_file_which_appeared foo.log
- и tail должен это перехватить.
Чтобы правильно следить за каталогами (шаг 3), вам понадобится настраиваемый, умный инструмент.
Лично я бы использовалСторожитьсОхранник::Процесс.
На практике Guard не намного тяжелее, чем использование скриптов оболочки (это тонкий слой поверх inotify в Linux), и все это очень быстро и легко настраивается.