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.