Tail -f для вновь созданных файлов с неизвестными именами

Tail -f для вновь созданных файлов с неизвестными именами

У меня есть программа, которая для каждого запуска генерирует новый файл журнала. Чтобы посмотреть, что происходит, я хотел бы tail -fжурнал - единственная проблема в том, что я на самом деле не знаю имя файла заранее.

Итак, есть ли способ отслеживать все файлы, которые соответствуют определенному шаблону (shell glob)? Я думаю, я мог бы легко написать что-то вроде этого, но мне интересно, есть ли уже решение.

решение1

Я не думаю, что есть прямой способ сделать это, tailне зная имени. Если бы вы его знали, то это tail --follow=name --retryсработало бы, и файл бы подождал, пока появится, а затем начал бы его отслеживать.

Я бы предложил написать небольшой скрипт оболочки, который будет inotifywaitследить за появлением файла, а затем начнет tail -fследовать за ним.

решение2

Если вы заранее не знаете имя файла:

  1. определитесь с именем файла, напримерfoo.log
  2. посмотрите этот файл: tail -F foo.log(неважно, существует foo или нет)
  3. используйте инструмент для отслеживания изменений файлов в каталоге и выполните команду

Для команды:

  • переместите новый файл, чтобы перезаписать foo.log mv the_new_file_which_appeared foo.log(если журнал приложения открывается один раз, это будет работать нормально)
  • или просто символическая ссылка: ln -s the_new_file_which_appeared foo.log- и tail должен это перехватить.

Чтобы правильно следить за каталогами (шаг 3), вам понадобится настраиваемый, умный инструмент.

Лично я бы использовалСторожитьсОхранник::Процесс.

На практике Guard не намного тяжелее, чем использование скриптов оболочки (это тонкий слой поверх inotify в Linux), и все это очень быстро и легко настраивается.

Связанный контент