59

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

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

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

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

6 ответов6

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 , поэтому tail следит за вашим файлом, даже если он был удален и создан заново.

4

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

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

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

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

4

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

watch -n2 "tail tool.log"

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

3

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

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

1

Я не уверен, подойдет ли multitail вашему конкретному случаю, но держу пари, что это так. multitail делает практически все, что вы хотели бы, чтобы tail делал.

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

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