Alternatywa dla „tail -f” po nazwie pliku


59

Niektóre dzienniki są generowane przy użyciu rejestratora plików z rotacją czasową. Loguje się do pliku o nazwie tool.log, a o północy przenosi go do tool.log.<date>i rozpoczyna nowy tool.log.

Mam tail -f tool.loguruchomioną maszynę, aby pilnować dzienników, ale o północy, kiedy tool.logzostanie przemianowana tool.log.<date>, tailnadal ogląda plik o zmienionej nazwie.

Mam nadzieję, że to narzędzie będzie podobne tail, ale będzie nadal monitorować nazwany plik tool.log, zamiast podążać za i-węzłem.

Czy coś takiego istnieje? Jeśli nie, w tym celu mogę napisać własny w języku Python.

Odpowiedzi:


90

Niektóre implementacje tailmają taką opcję; oto opis ze strony man dla GNU tail:

-F
taki sam jak --follow=name --retry

-f, --follow[ ={ nazwa | descriptor }]
generuje dołączane dane wraz ze wzrostem pliku; -f, --followi --follow=descriptorsą równoważne

--retry
próbuj otwierać plik, nawet jeśli jest on lub staje się niedostępny; przydatne, gdy następuje po nazwie, tj. z--follow=name

Ponieważ ta opcja nie jest określona przez POSIX, nie można na niej polegać wszędzie. Niektóre znane implementacje:

  • GNU - ma-Fjak opisano powyżej
  • Mac OS X , FreeBSD i NetBSD - mają podobną-Fopcję z tym samym efektem
  • OpenBSD --fwystarczy (jeśli plik zostanie zastąpiony (tzn. Zmieni się numer i-węzła), tail ponownie otworzy plik i będzie kontynuował)
  • Solaris - brak odpowiednika
  • Busybox --Fjest dostępny w najnowszych wersjach, ale musi zostać skompilowanyENABLE_FEATURE_FANCY_TAIL(domyślnie nie jest skompilowany)

55

Alternatywą jest tail -Fpolecenie.

-FOpcja zakłada --follow=namez --retryopcji, więc ogon ogląda plik nawet jeśli został usunięty i utworzony ponownie.


5

Ponieważ poprosiłeś o alternatywę :

lessNarzędzie może być alternatywą tail -F.

Będzie trzeba go uruchomić w następujący sposób: less --follow-name filename.logi naciśnij Shift+ F.

To da ci takie same wyniki jak tail -F.


Dzięki. Szukałem tylko alternatywy, ponieważ nie byłem świadomy ogona -F. Zawsze jednak warto znać opcje.
— Hugh

4

Inną alternatywą byłoby użycie watchpolecenia, które będzie powtarzać każde polecenie co n sekund, co 2 sekundy w tym przykładzie:

watch -n2 "tail tool.log"

Użyj Ctrl+, Caby wyjść z polecenia po zakończeniu przeglądania dziennika.


1
Wygląda na to, że utworzyłoby wiele zduplikowanych wiadomości, gdyby dziennik przewijał się wolniej niż timer odświeżania, i pomijałby niektóre wiadomości, gdyby przewijał się szybciej.
— Bobson

3
Watch przejmuje cały ekran, więc nie powiela wiadomości, ale usuwa możliwość przewijania.
— Hugh

3

lnav to kolejne fantastyczne narzędzie, które śledzi nazwę pliku.

Możesz także wskazać katalog, a wszystkie pliki w tym katalogu zostaną uzupełnione, oprócz wszystkich innych ciekawych funkcji.


Odkryłem, że nie obsługuje skróconych i / lub przemianowanych obróconych dzienników (nie jestem pewien, co go denerwuje w moim konkretnym przypadku), więc dzienniki wydają się zatrzymywać o północy, chyba że uruchomię ponownie lnav. Zastanawiam się, czy brakuje mi jakiegoś oczywistego przełącznika lub techniki, ponieważ wydaje się, że powinno to działać jak należy?
— Stuart Hickinbottom,

To zależy od tego, jak plik jest obcinany. Jeśli przekażesz -rflagę do lnav, przeładuje ona nazwę pliku (i załaduje wcześniej obrócone dzienniki)
— Wayne Werner

1

Nie jestem pewien, czy poradzę multitailsobie z konkretnym przypadkiem, ale założę się, że tak. multitail robi prawie wszystko, co możesz chcieć tailzrobić.

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


1
Tak, będzie multitail -f <name1> -f <name2> -f <name3> .... Ten przykład pokazuje następujące kilka plików jednocześnie, które będą wyświetlane w osobnych oknach.
— Stuart Hickinbottom,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.