Альтернатива "tail -f", що слідує за назвою файлу


59

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

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

На що я сподіваюся, це інструмент, подібний до tail, але продовжуватиме моніторити названий файл tool.log, а не слідкувати за inode.

Чи існує щось подібне? Якщо ні, то я можу написати власну на Python для цієї мети.

Відповіді:


90

У деяких реалізаціях для tailцього є можливість; ось опис зі сторінки man для хвоста 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достатньо (якщо файл буде замінено (тобто число inode змінюється), хвіст знову відкриє файл і продовжить)
  • Solaris - не еквівалент
  • 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.


Дякую. Я був лише після альтернативи, тому що мені не було відомо про хвіст -F. Завжди добре знати варіанти, хоча.
Х'ю

4

Іншою альтернативою може бути використання watchкоманди, яка буде повторювати будь-яку команду кожні n секунд, кожні 2 секунди в цьому прикладі:

watch -n2 "tail tool.log"

Використовуйте Ctrl+, Cщоб вийти з команди, коли ви закінчите перегляд журналу.


1
Схоже, це створило б багато повторюваних повідомлень, якщо журнал прокручується повільніше, ніж таймер оновлення, і пропустив би деякі повідомлення, якщо він прокручується швидше.
Бобсон

3
Watch переймає весь екран, тому він не повторює повідомлення, але це зніме можливість прокрутки назад.
Х'ю

3

lnav - це ще один фантастичний інструмент, який слід за назвою файлу.

Ви також можете вказати його на каталог, і він створить хвіст на всі файли в цьому каталозі, на додаток до всіх інших акуратних функцій.


Я виявив, що він не обробляє усічені та / або перейменовані обернені журнали (я не впевнений, що це засмучує в моєму конкретному випадку), тому журнали, як видається, зупиняються опівночі, якщо я не перезапущу lnav. Невже я пропускаю якийсь очевидний перемикач чи техніку для цього, мені цікаво, як це здається чимось, що воно повинно взяти на крок?
Стюарт Хікінботт

Це залежить від того, як усічений файл. Якщо ви передасте -rпрапор lnav, він перезавантажить ім'я файлу (і завантажить усі раніше обернені журнали)
Wayne Werner

1

Я не впевнений, чи multitailвирішуватиме ваш конкретний випадок, але я думаю, що це так. multitail робить майже все, що ви могли б хотіти tailзробити.

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


1
Так, це буде - multitail -f <name1> -f <name2> -f <name3> .... Цей приклад показує наступні декілька файлів одночасно, які будуть показані в окремих вікнах.
Стюарт Хікінботт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.