J'exécute un serveur et le journal de ce serveur est connecté au terminal, pas dans aucun fichier. J'aimerais utiliser moins pour afficher ce journal.
node server.js | less
Quand je veux juste voir le journal, j'utilise appuyez sur Shift+ Fpour 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?
command-line
pipe
less
Ajay Kumar
la source
la source
less
et revenir à votre invite shell avec lenode
serveur exécuté en arrière-plan, ou voulez-vous simplementless
revenir en mode normal non-suivant où vous pouvez faire défiler le journal au lieu de regarder les dernières lignes?Réponses:
Je ne trouve aucun moyen de quitter le
F
mode dansless
, vous devrez donc utiliser une solution de contournement. Par exemple, enregistrez la sortie dans un fichier tmp, puis regardez ce fichier tmp à la place:Le
&
faitnode.js
exécuter la commande en arrière-plan. Cela signifie queless tmpfile
cela démarrera immédiatement et suivra le fichier tmp.Une fois dedans
less
, vous pouvez appuyer sur Fpour entrer en mode suivi mais maintenant Ctrl+ Cne tuera pas le serveur, il arrêtera seulement le suivi. Vous pouvez maintenant faire défiler comme vous le souhaitez et appuyez sur Fpour reprendre la suite.la source
Il semble que vous ne soyez normalement pas censé quitter le mode "Forward forever", c'est ainsi que le manuel
man less
nomme le mode que vous entrez lorsque vous appuyez sur Shift+ F.Cependant, j'ai trouvé un petit truc sale pour revenir à la normale de toute façon. Cependant, cela gèlera brièvement la commande, donc je ne suis pas sûr qu'elle convienne à votre serveur qui devrait probablement fonctionner sans interruption.
Quoi qu'il en soit, voici l'astuce:
Je suppose que vous avez démarré
node server.js | less
alredy et appuyé sur Shift+ Fpour passer en mode "Forward forever". Maintenant, illess
ne réagit plus aux pressions de touches.Dans cet état, vous pouvez appuyer sur Ctrl+ Cpour tuer le processus serveur et pouvoir quitter
less
ensuite en appuyant sur Q(ce qui, cependant, pour une raison quelconque, laissera la commande en tant que processus arrêté dans votre liste de travaux - vous devez exécuterfg
pour la poursuivre et la laisser complètement terminer après), mais ce n'est pas ce que nous voulons.Au lieu de cela, vous pouvez également appuyer sur Ctrl+ Zpour arrêter ("geler") la commande et revenir à votre invite shell. Tapez maintenant rapidement la commande shell
fg
(" f ore g round") pour laisser la commande continuer à s'exécuter au premier plan. Notez que votrenode
processus serveur est également suspendu pendant cette courte période, vous devez vous demander si cela est acceptable ou non.Alors, maintenant, il
less
fonctionne à nouveau au premier plan comme avant, non? Oui, mais comme par magie, il n'est plus en mode "Forward forever". Vous pouvez par exemple utiliser à nouveau les touches fléchées pour faire défiler vers le haut et vers le bas.Malheureusement,
less
semble avoir complètement arrêté la mise à jour de son tampon, vous ne pouvez que faire défiler jusqu'à la ligne sur laquelle vous avez gelé la commande plus tôt, pas plus. Lenode
serveur est toujours en cours d' exécution et produire une sortie bien, il suffit de seless
rafraîchir à nouveau.La façon la plus simple que j'ai trouvée de le faire est d'ouvrir simplement
less
l'écran d'aide et de le refermer, en appuyant sur les touches Het de Qmanière séquentielle. Maintenant, tout semble fonctionner à nouveau correctement.Cependant, la solution la plus propre est probablement de suivre la réponse de terdon et de rediriger la sortie vers un fichier temporaire, en utilisant
less
pour surveiller le fichier.la source
%
plutôt quefg
; Je trouve plus facile / plus rapide à taper. Il semble également queF
(shift-f) fonctionne toujours même sans faire l'hq
affaire. Agréable! Maintenant, quand je suis les journaux, je peuxctrl-z
%
Enter
, faire mon moins, puis recommencer à suivre en appuyantF
!less
est suivi fonction dans plusieurs terminaux en même temps.TSTP
signal interrompt l'appel système de lecture qui attendait l'arrivée de nouvelles données;less
reçoit 0 octet et conclut que la sortie est terminée. Pour éviter de suspendre le serveur, ouvrez une nouvelle fenêtre de terminal; exécuterps
et identifier l'ID deless
processus du processus; puis tapezkill -TSTP <PID>; kill -CONT <PID>
. De cette façon, les signaux devraient être délivrés dos à dos, sans délai pendant que vous tapez.kill
, vous pouvez simplement envoyer SIGINT à la place. Ensuite, vous n'aurez pas besoin d'envoyerCONT
etless
vous attend juste.Comme le dit votre question:
Je suppose que vous ne voulez pas utiliser un fichier journal (temporaire), peut-être que votre journal est énorme ou pour quelque raison que ce soit.
Pipe nommée,
fifo
fichier.Ce que j'ai trouvé est d'utiliser un fichier
named pipe file
également connu sous le nom defifo
fichier, ce fichier uniquement sera utilisé pour rediriger vos journaux vers moins, et rien ne sera enregistré dessus.Créez d'abord un
fifo file
:Exécutez votre serveur et redirigez les journaux vers ce fichier:
Utilisez moins pour lire vos journaux (-f force moins à lire ce fichier spécial):
Vous pouvez maintenant utiliser shift+ Fpour suivre et CTRL+ Cpour arrêter le suivi, mais le serveur est toujours en cours d'exécution, vous pouvez de nouveau suivre la sortie avec shift+ F.
Plan de sauvegarde : S'il a arrêté votre serveur, il suffit de mettre votre commande (
node server.js > mylog &
) dans un fichier par exemple:,server.sh
puis au lieu d'exécuternode server.js > mylog &
run:bash server.sh > mylog &
et d'exécuter ensuiteless -f mylog
.la source
logrotate
.