Ich verwende einen Server und das Protokoll dieses Servers wird im Terminal angemeldet, nicht in einer Datei. Ich möchte weniger verwenden, um dieses Protokoll anzuzeigen.
node server.js | less
Wenn ich nur das Protokoll sehen möchte, drücke ich Shift+, Fum zum Dateiende zu gelangen und die Protokolle weiter zu beobachten. Wenn ich es stoppen möchte, benutze ich CTRL+ C.
Leider stoppt dies auch den Server. Ich möchte nur aufhören, das Ende des Protokolls zu beobachten, ohne den Server anzuhalten.
Wie macht man das?
command-line
pipe
less
Ajay Kumar
quelle
quelle
less
und zu Ihrer Shell-Eingabeaufforderung zurückkehren, während dernode
Server im Hintergrund ausgeführt wird, oder möchten Sie einfachless
in den normalen Nicht-Folgemodus zurückkehren, in dem Sie durch das Protokoll scrollen können, anstatt die neuesten Zeilen zu sehen?Antworten:
Ich kann den
F
Modus nicht verlassenless
, daher müssen Sie eine Problemumgehung verwenden. Speichern Sie beispielsweise die Ausgabe in einer tmp-Datei und beobachten Sie stattdessen diese tmpfile:Das
&
macht dennode.js
Befehl im Hintergrund ausgeführt werden . Dies bedeutet, dass diesless tmpfile
sofort startet und die tmpfile verfolgt.Einmal in
less
, können Sie drücken, Fum in den Verfolgungsmodus zu wechseln, aber jetzt Ctrl+ Cwird der Server nicht beendet, sondern nur die Verfolgung gestoppt. Sie können jetzt nach Belieben scrollen und auf klicken F, um die folgenden Schritte fortzusetzen.quelle
Es scheint, dass Sie normalerweise
man less
den Modus "Für immer weiterleiten" nicht verlassen sollten. So benennt das Handbuch den Modus, den Sie beim Drücken von Shift+ aufrufen F.Ich habe jedoch einen kleinen schmutzigen Trick gefunden, wie man sowieso wieder normal werden kann. Der Befehl wird jedoch kurz eingefroren, sodass ich nicht sicher bin, ob er für Ihren Server geeignet ist, der wahrscheinlich ohne Unterbrechung ausgeführt werden sollte.
Wie auch immer, hier ist der Trick:
Ich
node server.js | less
gehe davon aus, dass Sie bereits gestartet und Shift+ gedrückt haben, Fum in den Modus "Für immer weiterleiten " zu wechseln.less
Reagiert jetzt nicht mehr auf Tastendrücke.In diesem Zustand können Sie Ctrl+ drücken C, um den Serverprozess zu beenden, und
less
anschließend durch Drücken von beenden Q(was den Befehl jedoch aus irgendeinem Grund als gestoppten Prozess in Ihrer Jobliste belässt - Sie müssen ihn ausführenfg
, um ihn fortzusetzen und vollständig zuzulassen danach beenden), aber das ist nicht was wir wollen.Stattdessen können Sie auch Ctrl+ drücken Z, um den Befehl zu stoppen ("einzufrieren") und zu Ihrer Shell-Eingabeaufforderung zurückzukehren. Geben Sie nun schnell den Shell-Befehl
fg
(" f ore g round") ein, damit der Befehl weiterhin im Vordergrund ausgeführt wird. Beachten Sie, dass Ihrnode
Serverprozess auch während dieser kurzen Zeit angehalten wird. Sie müssen überlegen, ob dies akzeptabel ist oder nicht.Läuft jetzt
less
also wieder wie zuvor im Vordergrund, oder? Ja, aber magischerweise befindet es sich nicht mehr im Modus "Für immer weiterleiten". Sie können zB die Pfeiltasten erneut verwenden, um nach oben und unten zu scrollen.Leider
less
scheint die Aktualisierung des Puffers vollständig gestoppt zu sein. Sie können nur bis zu der Zeile scrollen, in der Sie den Befehl zuvor eingefroren haben, nicht weiter. Dernode
Server läuft noch und produziert Ausgabe, wir müssen nur nochless
einmal aktualisieren.Der einfachste Weg, dies zu tun, besteht darin, den Hilfebildschirm einfach zu öffnen
less
und wieder zu schließen, indem ich die Tasten Hund Qnacheinander drücke. Jetzt scheint alles wieder gut zu funktionieren.Die sauberste Lösung besteht jedoch wahrscheinlich darin, der Antwort von terdon zu folgen und die Ausgabe in eine temporäre Datei umzuleiten
less
, um die Datei zu überwachen.quelle
%
stattfg
; Ich finde es einfacher / schneller zu tippen. Es scheint auch, dassF
(Shift-F) auch ohnehq
Trick funktioniert . Nett! Wenn ich jetzt Protokollen folge, kannctrl-z
%
Enter
ich weniger tun und dann durch Schlagen wieder folgenF
!less
‚s folgen Funktion in mehreren Terminals gleichzeitig.TSTP
Signal den Aufruf des Lesesystems unterbricht, der auf das Eintreffen neuer Daten wartete.less
empfängt 0 Bytes und kommt zu dem Schluss, dass die Ausgabe beendet wurde. Öffnen Sie ein neues Terminalfenster, um eine Unterbrechung des Servers zu vermeiden. Ausführenps
und Identifizieren der Prozess-ID desless
Prozesses; Geben Sie dann einkill -TSTP <PID>; kill -CONT <PID>
. Auf diese Weise sollten die Signale während der Eingabe ohne Verzögerung hintereinander übertragen werden.kill
, können Sie stattdessen einfach SIGINT senden. Dann müssen Sie nicht sendenCONT
undless
warten nur auf Sie.Wie Ihre Frage sagt:
Ich gehe davon aus, dass Sie keine (temporäre) Protokolldatei verwenden möchten, vielleicht ist Ihr Protokoll riesig oder aus welchem Grund auch immer.
Named Pipe,
fifo
Datei.Was ich mir ausgedacht habe, ist die Verwendung einer
named pipe file
auch alsfifo
Datei bezeichneten Datei. Diese Datei wird nur verwendet, um Ihre Protokolle auf weniger zu leiten, und es wird nichts darauf gespeichert.Erstellen Sie zuerst ein
fifo file
:Führen Sie Ihren Server aus und leiten Sie die Protokolle in diese Datei um:
Verwenden Sie weniger zum Lesen Ihrer Protokolle (-f erzwingt weniger zum Lesen dieser speziellen Datei):
Jetzt können Sie shift+ verwenden F, um zu folgen, und CTRL+ C, um das Folgen zu stoppen, aber der Server läuft noch. Sie können die Ausgabe erneut mit shift+ verfolgen F.
Sicherungsplan : Wenn Ihr Server gestoppt wurde, fügen Sie einfach Ihren Befehl (
node server.js > mylog &
) in eine Datei ein, z. B.:server.sh
, Anstattnode server.js > mylog &
run: auszuführen,bash server.sh > mylog &
und führen Sie dann den ausless -f mylog
.quelle
logrotate
.