6

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

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

2 ответа2

5

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

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

1

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

  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 с Guard::Process.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .