Zakończenie ogona -f po wydrukowaniu n linii

10

Mam następujące.

  1. Proces Java zapisujący loguje się do pliku
  2. Skrypt powłoki uruchamiający proces Java.

Muszę przeczytać plik dziennika po uruchomieniu procesu Java, aby sprawdzić poprawne uruchomienie.

Próbowałem, tail -fale pozostanie dołączony na zawsze. Potrzebuję tailprzestać po wydrukowaniu n linii. Istnieje sposób na -nopcję dla poprzednich linii?

theShadow89
źródło
1
Czy plik dziennika jest czyszczony za każdym razem, gdy skrypt powłoki uruchomi proces Java?
c0rp
Używam log4j w trybie dołączania do pisania pliku dziennika. Obraca się, gdy rozmiar pliku wzrośnie do 10 MB.
theShadow89

Odpowiedzi:

24

Możesz przesłać dane wyjściowe do tail -fdo, headaby ograniczyć liczbę wyświetlanych linii:

tail -f [PATH] | head -n 100

aby wyświetlić w sumie tylko 100 linii.

David Foerster
źródło
7

Tylko nowe linie

W przypadku zwykłego tail -fpierwsze 10 wierszy pochodzi z pliku, ponieważ już istnieje:

tail -f file.log | head -30

zapisuje 10 linii log.txtpo uruchomieniu i 20 (n-10) linii, które są dodawane później.

W przypadku pliku dziennika zwykle używasz -f( --follow), aby zobaczyć wiersze zapisane w przyszłości.

Aby zobaczyć tylko 30 wierszy, w których zapisano później tail, ogranicz początkowe wyjście do 0:

tail -f -n0 file.log | head -30
Volker Siegel
źródło