web-dev-qa-db-fra.com

Comment puis-je arrêter de suivre la sortie en moins, sans affecter la commande générant la sortie?

J'exécute un serveur et le journal de ce serveur est consigné dans le terminal, pas dans un fichier. Je voudrais utiliser moins pour afficher ce journal.

node server.js | less

Quand je veux juste voir le journal, j'utilise presse Shift+F arriver à la fin du fichier et continuer à regarder les journaux. Quand je veux l'arrêter, j'utilise CTRL+C.

Malheureusement, cela arrête également le serveur. Je veux juste arrêter de regarder la fin du journal sans arrêter le serveur.

Comment faire ça?

10
Ajay Kumar

Je ne trouve aucun moyen de quitter le mode F dans less; vous devrez donc utiliser une solution de contournement. Par exemple, enregistrez la sortie dans un fichier tmp, puis observez ce fichier tmp:

node server.js > tmpfile & less tmpfile

Le & permet d'exécuter la commande node.js en arrière-plan. Cela signifie que less tmpfile démarrera immédiatement et suivra le fichier tmp.

Une fois dans less, vous pouvez appuyer sur F entrer en mode suivi mais maintenant Ctrl+C ne tue pas le serveur, il n'arrêtera que la suite. Vous pouvez maintenant faire défiler à votre guise et appuyer sur F reprendre après.

15
terdon

Il semble que vous ne soyez normalement pas censé quitter le mode "Transférer à jamais". C'est ainsi que le manuel man less nomme le mode que vous avez activé lorsque vous appuyez sur Shift+F.

Cependant, j'ai trouvé un petit truc sale comment revenir à la normale quand même. Cependant, il va brièvement figer la commande. Je ne sais donc pas si cela conviendrait à votre serveur, qui devrait probablement fonctionner sans interruption.


Quoi qu'il en soit, voici le truc:

Je suppose que vous avez démarré node server.js | less déjà et que vous avez appuyé sur Shift+F pour entrer dans le mode "Transférer à jamais". lessne réagit plus à aucune pression de touche.

Dans cet état, vous pouvez appuyer sur Ctrl+C pour tuer le processus serveur et pouvoir quitter lessen appuyant sur Q (ce qui, pour une raison quelconque, laissera la commande en tant que processus arrêté dans votre liste de tâches - vous devez exécuter fgpour la poursuivre et la laisser se terminer complètement par la suite), mais il s’agit de et non ce que nous voulons.

Au lieu de cela, vous pouvez également appuyer sur Ctrl+Z pour arrêter ("geler") la commande et revenir à votre invite du shell. Maintenant, tapez rapidement la commande Shell fg(" f ou g round" ) pour laisser la commande continuer à courir en avant-plan. Notez que votre processus serveur nodeest également suspendu pendant cette courte période. Vous devez vous demander si cela est acceptable ou non.

Alors maintenant, lessest de nouveau au premier plan comme avant, non? Oui, mais comme par magie, il n’est plus en mode "Transférer à jamais". Vous pouvez utiliser par exemple les touches fléchées à nouveau pour faire défiler de haut en bas.

Malheureusement, lesssemble avoir complètement arrêté la mise à jour de son tampon, vous pouvez uniquement faire défiler l'écran jusqu'à la ligne sur laquelle vous avez gelé la commande plus tôt. Le serveur nodeest toujours en cours d’exécution et produit une sortie. Il suffit juste d’obtenir lesspour se régénérer.

Le moyen le plus simple que j'ai trouvé est simplement d'ouvrir l'écran d'aide less'et de le refermer en appuyant sur les touches H et Q séquentiellement. Maintenant, tout semble bien fonctionner à nouveau.


Cependant, la solution la plus propre consiste probablement à suivre réponse de terdon et à rediriger la sortie vers un fichier temporaire, en utilisant lesspour surveiller le fichier.

12
Byte Commander

Comme votre question le dit:

Ce serveur est connecté au terminal, pas dans un fichier.

Je suppose que vous ne voulez pas utiliser un fichier journal (temporaire), peut-être que votre journal est énorme ou pour une raison quelconque.


Canal nommé, fichier fifo.

Ce que j’ai pensé, c’est d’utiliser un named pipe file également appelé fichier fifo, ce fichier ne sera utilisé que pour canaliser moins vos journaux et rien ne sera sauvegardé dessus.

Commencez par créer un fifo file:

mkfifo mylog

Exécutez votre serveur et redirigez les journaux vers ce fichier:

node server.js > mylog &

Utilisez less pour lire vos journaux (-f oblige less à lire ce fichier spécial):

less -f mylog

Maintenant vous pouvez utiliser shift+F à suivre, et CTRL+C pour arrêter le suivi, mais le serveur est toujours en marche, vous pouvez suivre la sortie à nouveau avec shift+F.


Plan de sauvegarde: S'il a arrêté votre serveur, il suffit de placer votre commande (node server.js > mylog &) dans un fichier, par exemple: server.sh, puis au lieu d'exécuter node server.js > mylog &, exécutez: bash server.sh > mylog &, puis exécutez le less -f mylog.

3
Ravexina