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.

Hugh
źródło

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)
Toby Speight
źródło
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.

Oleg Bolden
źródło
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.

VL-80
źródło
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.

Arroniczny
źródło
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.

Wayne Werner
źródło
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

Andy Lester
źródło
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,