Альтернатива для «tail -f», который следует за именем файла

59

У меня есть несколько журналов, генерируемых с использованием временного вращающегося файлового регистратора. Это записывает в файл с именем tool.log, и в полночь, перемещает это в tool.log.<date>и запускает новый tool.log.

У меня tail -f tool.logработает машина, которая следит за журналами, но в полночь, когда tool.logпереименовывается tool.log.<date>, tailпродолжает смотреть переименованный файл.

Я надеюсь, что инструмент похож на него tail, но будет продолжать следить за именем файла tool.log, а не следовать за индексом.

Существует ли что-то подобное? Если нет, я могу написать свой собственный на Python для этой цели.

Хью
источник

Ответы:

90

Некоторые реализации tailимеют опцию для этого; вот описание со страницы руководства для хвоста GNU:

-F
такой же как --follow=name --retry

-f, --follow[ ={ имя | дескриптор }]
выводить добавленные данные по мере роста файла; -f, --followИ --follow=descriptorэквивалентны

--retry
продолжайте пытаться открыть файл, даже если он или становится недоступным; полезно при следовании по имени, т. е. с--follow=name

Поскольку эта опция не указана в POSIX, вы не можете зависеть от нее везде. Некоторые известные реализации:

  • GNU - имеет,-Fкак описано выше
  • Mac OS X , FreeBSD и NetBSD - имеют похожую-Fопцию с одинаковым эффектом
  • OpenBSD --fдостаточно (если файл будет заменен (т. Е. Номер инода изменится), tail снова откроет файл и продолжит)
  • Солярис - не эквивалент
  • Busybox --Fдоступен в последних версиях, но должен быть скомпилированENABLE_FEATURE_FANCY_TAIL(по умолчанию он не скомпилирован)
Тоби Спейт
источник
55

Альтернативой является tail -Fкоманда.

-FОпция подразумевает --follow=nameс --retryопцией, так что хвост смотрит ваш файл , даже если он был удален и создан заново.

Олег Болден
источник
5

Так как вы попросили альтернативу :

lessУтилита может быть альтернативой для tail -F.

Он должен быть запущен следующим образом: less --follow-name filename.logи нажмите Shift+ F.

Это даст вам те же результаты, что и tail -F.

VL-80
источник
Благодарю. Я был только после альтернативы, потому что я не знал о хвосте -F. Всегда полезно знать варианты, хотя.
Хью
4

Другой альтернативой будет использование watchкоманды, которая будет повторять любую команду каждые n секунд, каждые 2 секунды в этом примере:

watch -n2 "tail tool.log"

Используйте Ctrl+, Cчтобы выйти из команды, когда вы закончите просмотр журнала.

Arronical
источник
1
Похоже, что это создало бы много дублирующих сообщений, если журнал прокручивался медленнее, чем таймер обновления, и пропустил бы некоторые сообщения, если бы он прокручивался быстрее.
Бобсон
3
Наблюдение занимает весь экран, поэтому оно не дублирует сообщения, но устраняет возможность прокрутки назад.
Хью
3

lnav - это еще один фантастический инструмент, который следует за именем файла.

Вы также можете указать его на каталог, и он будет привязывать все файлы в этом каталоге, в дополнение ко всем другим полезным функциям.

Уэйн Вернер
источник
Я обнаружил, что он не обрабатывает усеченные и / или переименованные повернутые журналы (я не уверен, что расстраивает его в моем конкретном случае), поэтому журналы, по-видимому, останавливаются в полночь, пока я не перезапущу lnav. Мне не хватает какого-то очевидного переключателя или техники для этого, мне интересно, так как это кажется чем-то, что нужно принять с ходу?
Стюарт Хикинботтом
Это зависит от того, как файл обрезается. Если вы передадите -rфлаг lnav, он перезагрузит имя файла (и загрузит все ранее
Уэйн Вернер,
1

Я не уверен, что multitailсправится с вашим конкретным делом, но держу пари, что так и есть. multitail делает практически все, что вы могли tailбы сделать.

https://en.wikipedia.org/wiki/MultiTail

Энди Лестер
источник
1
Да, это будет multitail -f <name1> -f <name2> -f <name3> .... Этот пример показывает следующие несколько файлов одновременно, которые будут показаны в отдельных окнах.
Стюарт Хикинботтом