Wie kann ich aufhören, der Ausgabe weniger zu folgen, ohne den Befehl zu beeinflussen, der die Ausgabe erzeugt?

9

Ich betreibe einen Server und das Protokoll dieses Servers wird im Terminal eingeloggt, nicht in irgendeiner Datei. Ich möchte weniger verwenden, um dieses Protokoll anzuzeigen.

node server.js | less

Wenn ich nur das Protokoll sehen möchte, benutze ich Shift + F , um zum Ende der Datei zu gelangen und die Logs zu beobachten. Wenn ich es stoppen möchte, verwende ich CTRL + C .

Leider stoppt dies auch den Server. Ich möchte nur aufhören, das Ende des Logs zu beobachten, ohne den Server anzuhalten.

Wie geht das?

    
Ajay Kumar 17.04.2017, 14:20

3 Antworten

14

Ich kann keine Möglichkeit finden, den F -Modus in less zu beenden, daher müssen Sie eine Problemumgehung verwenden. Speichern Sie beispielsweise die Ausgabe in einer tmp-Datei und sehen Sie sich stattdessen die tmpfile an:

node server.js > tmpfile & less tmpfile

Der Befehl & bewirkt, dass der Befehl node.js im Hintergrund ausgeführt wird. Dies bedeutet, dass less tmpfile sofort startet und die tmpfile verfolgt.

Einmal in less , können Sie F drücken, um in den Folge-Modus zu wechseln, aber jetzt Strg + C wird nicht den Server töten, Es wird nur die Folge stoppen. Sie können nun beliebig blättern und F drücken, um das nächste zu tun.

    
terdon 17.04.2017, 15:16
10

Es scheint, dass Sie den "Forward forever" -Modus normalerweise nicht verlassen sollten. Das heißt, das Handbuch man less benennt den Modus, den Sie eingeben, wenn Sie Shift + F .

Allerdings habe ich einen kleinen schmutzigen Trick gefunden, wie man sowieso wieder normal werden kann. Es wird den Befehl jedoch kurz einfrieren, also bin ich nicht sicher, ob es für Ihren Server geeignet wäre, der wahrscheinlich ununterbrochen laufen sollte.

Wie auch immer, hier ist der Trick:

Ich nehme an, dass Sie node server.js | less alredy gestartet haben und Shift + F gedrückt haben, um den Modus "Forward forever" aufzurufen. Jetzt reagiert less nicht mehr auf Tastenkombinationen.

In diesem Zustand können Sie Strg + C drücken, um den Serverprozess zu beenden und less anschließend zu beenden, indem Sie Q drücken > (was jedoch aus irgendeinem Grund den Befehl als angehaltenen Prozess in Ihrer Jobliste belässt - Sie müssen fg ausführen, um fortzufahren und es anschließend vollständig zu beenden), aber das ist nicht was wir tun will.

Stattdessen können Sie auch Strg + Z drücken, um den Befehl zu stoppen ("einzufrieren") und zur Shell-Eingabeaufforderung zurückzukehren. Geben Sie nun schnell den Shell-Befehl fg (" f ore g round") ein, damit der Befehl im Vordergrund weiterläuft. Beachten Sie, dass Ihr Prozess node Server auch während dieser kurzen Zeit pausiert ist. Sie müssen überlegen, ob dies akzeptabel ist oder nicht.

Also läuft less wieder im Vordergrund wie vorher, oder? Ja, aber magisch ist es nicht länger im "Forward forever" -Modus. Sie können z.B. Mit den Pfeiltasten erneut nach oben und unten scrollen.

Leider scheint less den Puffer nicht vollständig aktualisiert zu haben. Sie können nur zu der Zeile blättern, bei der Sie den Befehl früher eingefroren haben, nicht weiter. Der node -Server läuft noch und produziert trotzdem die Ausgabe, wir müssen nur less holen, um ihn erneut zu aktualisieren.

Der einfachste Weg, den ich gefunden habe, besteht darin, einfach den Hilfebildschirm " less " zu öffnen und ihn wieder zu schließen, indem nacheinander die Tasten H und Q gedrückt werden. Jetzt scheint alles wieder gut zu funktionieren.

Die sauberste Lösung ist jedoch, terdons Antwort zu folgen und die Ausgabe mit less in eine temporäre Datei umzuleiten. um die Datei zu überwachen.

    
Byte Commander 17.04.2017 15:42
2

Wie Ihre Frage sagt:

  

Dieser Server wird im Terminal angemeldet, nicht in einer Datei.

Ich nehme an, dass Sie keine (temporäre) Protokolldatei verwenden möchten, vielleicht ist Ihr Protokoll riesig oder aus irgendeinem Grund, den Sie haben.

Named pipe, fifo file.

Ich habe eine named pipe file , auch bekannt als fifo -Datei, Diese Datei wird nur verwendet, um Ihre Protokolle auf weniger zu übertragen, und nichts wird darauf gespeichert.

Erstellen Sie zuerst ein fifo file :

mkfifo mylog

Führen Sie Ihren Server aus und leiten Sie die Protokolle in diese Datei um:

node server.js > mylog &

Verwenden Sie weniger, um Ihre Protokolle zu lesen (-f zwingt weniger, diese spezielle Datei zu lesen):

less -f mylog

Nun können Sie shift + F verwenden, um zu folgen, und CTRL <+ kb> C um das Folgen zu stoppen, aber der Server läuft noch, Sie können die Ausgabe erneut mit shift + F verfolgen.

Backup-Plan : Wenn Ihr Server gestoppt wurde, geben Sie einfach Ihren Befehl ( node server.js > mylog & ) in eine Datei ein, zB: server.sh , und dann statt node server.js > mylog & run: bash server.sh > mylog & und Führen Sie dann less -f mylog aus.

    
Ravexina 17.04.2017 22:59

Tags und Links