Korzystam z serwera, a dziennik tego serwera jest logowany w terminalu, a nie w żadnym pliku. Chciałbym użyć mniej, aby wyświetlić ten dziennik.
node server.js | less
Gdy chcę tylko zobaczyć dziennik, naciskam Shift+, Faby przejść do końca pliku i oglądać dzienniki. Kiedy chcę to zatrzymać, używam CTRL+ C.
Niestety to także zatrzymuje serwer. Chcę po prostu przestać oglądać koniec dziennika bez zatrzymywania serwera.
Jak to zrobić?
command-line
pipe
less
Ajay Kumar
źródło
źródło
less
i powrócić do monitu powłoki znode
serwerem działającym w tle, czy po prostu chceszless
wrócić do normalnego trybu braku śledzenia, w którym możesz przewijać dziennik zamiast oglądać najnowsze wiersze?Odpowiedzi:
Nie mogę znaleźć żadnego sposobu wyjścia z
F
trybuless
, więc będziesz musiał skorzystać z obejścia. Na przykład zapisz wynik w pliku tmp, a następnie obejrzyj ten plik tmp:&
Sprawia, żenode.js
polecenie Uruchom w tle. Oznacza to, żeless tmpfile
rozpocznie się natychmiast i będzie śledził plik tmp.Po wejściu
less
możesz nacisnąć, Faby przejść do trybu śledzenia, ale teraz Ctrl+ Cnie zabije serwera, tylko zatrzyma śledzenie. Możesz teraz przewijać, jak chcesz i możesz nacisnąć, Faby wznowić śledzenie.źródło
Wygląda na to, że zwykle nie powinieneś wychodzić z trybu „Forward forever”, czyli tak
man less
nazywa się tryb wprowadzany po naciśnięciu Shift+ F.Znalazłem jednak trochę brudną sztuczkę, jak możesz wrócić do normalności. Na chwilę jednak zawiesi polecenie, więc nie jestem pewien, czy będzie on odpowiedni dla twojego serwera, który prawdopodobnie powinien działać nieprzerwanie.
W każdym razie oto sztuczka:
Zakładam, że zacząłeś już
node server.js | less
alredy i nacisnąłeś Shift+, Faby przejść do trybu „Forward forever”. Terazless
nie reaguje już na żadne naciśnięcia klawiszy.W tym stanie możesz nacisnąć Ctrl+, Caby zabić proces serwera, a
less
następnie możesz wyjść , naciskając Q(co jednak z jakiegoś powodu pozostawi polecenie jako zatrzymany proces na liście zadań - musisz uruchomić,fg
aby kontynuować i pozwolić mu całkowicie zakończyć później), ale nie tego chcemy.Zamiast tego możesz także nacisnąć Ctrl+, Zaby zatrzymać („zamrozić”) polecenie i powrócić do monitu powłoki. Teraz szybko wpisać polecenie powłoki
fg
( „ f ore g round”), aby pozwolić polecenie nadal działa w planie. Pamiętaj, żenode
proces serwera jest również wstrzymany w tym krótkim czasie, musisz rozważyć, czy jest to dopuszczalne, czy nie.Więc teraz
less
znów działa na pierwszym planie, tak? Tak, ale magicznie nie jest już w trybie „Forward forever”. Możesz np. Ponownie użyć klawiszy strzałek, aby przewijać w górę i w dół.Niestety
less
wydaje się, że całkowicie przestał aktualizować swój bufor, możesz tylko przewinąć w dół do linii, w której wcześniej zamroziłeś polecenie, a nie dalej.node
Serwer wciąż działa i wytwarza kopie choć, po prostu dostaćless
się ponownie odświeżyć.Najłatwiejszy sposób to po prostu otworzyć
less
ekran pomocy i zamknąć go, naciskając kolejno klawisze Hi Qkolejno. Teraz wszystko znów działa dobrze.Najczystszym rozwiązaniem jest jednak prawdopodobnie podążanie za odpowiedzią Terdona i przekierowanie danych wyjściowych do pliku tymczasowego za pomocą pliku
less
do monitorowania.źródło
%
zamiastfg
; Uważam, że łatwiej / szybciej pisać. Wydaje się również, żeF
(shift-f) nadal działa, nawet bez robienia tegohq
. Miły! Teraz, gdy śledzę dzienniki, mogęctrl-z
%
Enter
zrobić mniej, a potem wrócić do śledzenia, naciskającF
!less
z poniższych działają w wielu terminalach jednocześnie.TSTP
sygnał przerywa odczytane wywołanie systemowe, które czekało na nadejście nowych danych;less
otrzymuje 0 bajtów i stwierdza, że wyjście zostało zakończone. Aby uniknąć wstrzymywania serwera, otwórz nowe okno terminala; wykonaćps
i zidentyfikować identyfikatorless
procesu; następnie wpiszkill -TSTP <PID>; kill -CONT <PID>
. W ten sposób sygnały powinny być dostarczane z powrotem do tyłu, bez opóźnienia podczas pisania.kill
, możesz po prostu wysłać SIGINT. Wtedy nie będziesz musiał wysyłaćCONT
, aless
tylko czeka na ciebie.Jak mówi twoje pytanie:
Zakładam, że nie chcesz używać pliku dziennika (temp), być może twój dziennik jest ogromny lub z dowolnego powodu.
Nazwany potok,
fifo
plik.To, co wymyśliłem, to użycie
named pipe file
znanego również jakofifo
plik, ten plik będzie służył tylko do przekierowywania dzienników do mniejszej ilości i nic na nim nie zostanie zapisane.Najpierw utwórz
fifo file
:Uruchom serwer i przekieruj dzienniki do tego pliku:
Używaj mniej, aby czytać logi (-f zmusza mniej do czytania tego specjalnego pliku):
Teraz możesz użyć shift+, Faby śledzić i CTRL+, Caby zatrzymać śledzenie, ale serwer nadal działa, możesz ponownie śledzić dane wyjściowe za pomocą shift+ F.
Plan tworzenia kopii zapasowych : Jeśli zatrzymałeś serwer, po prostu umieść polecenie (
node server.js > mylog &
) w pliku np .::server.sh
, a następnie zamiastnode server.js > mylog &
uruchom uruchom:bash server.sh > mylog &
i uruchomless -f mylog
.źródło
logrotate
.