Альтернатива "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.