Come posso smettere di seguire l'output in meno, senza influenzare il comando che genera l'output?

9

Sto facendo funzionare un server e il registro di questo server viene connesso al terminale, non in alcun file. Mi piacerebbe usare meno per vedere questo registro.

node server.js | less

Quando voglio solo vedere il registro, uso premere Shift + F per arrivare alla fine del file e continuare a guardare i registri. Quando voglio fermarlo, utilizzo CTRL + C .

Sfortunatamente, questo arresta anche il server. Voglio solo smettere di guardare la fine del registro senza arrestare il server.

Come si fa?

    
posta Ajay Kumar 17.04.2017 - 14:20

3 risposte

14

Non riesco a trovare alcun modo per uscire dalla modalità F in less , quindi dovrai utilizzare una soluzione alternativa. Ad esempio, salva l'output in un file tmp e poi guarda quel file tmp invece:

node server.js > tmpfile & less tmpfile

Il & esegue il comando node.js eseguito in background. Ciò significa che less tmpfile verrà avviato immediatamente e traccerà il file tmp.

Una volta in less , puoi premere F per entrare in modalità follow ma ora Ctrl + C non ucciderà il server, fermerà solo il seguito. Ora puoi scorrere come vorresti e puoi premere F per riprendere dopo.

    
risposta data terdon 17.04.2017 - 15:16
10

Sembra che normalmente non si debba uscire dalla modalità "Avanti per sempre", ovvero come il manuale man less assegna un nome alla modalità inserita quando si preme Maiusc + F .

Tuttavia, ho trovato un piccolo trucco sporco su come puoi tornare alla normalità comunque. Tuttavia congelerà brevemente il comando, quindi non sono sicuro che sia adatto al tuo server, che probabilmente dovrebbe funzionare ininterrottamente.

Ad ogni modo, ecco il trucco:

Suppongo che tu abbia avviato node server.js | less alredy e premuto Maiusc + F per entrare nella modalità "Avanti per sempre". Ora less non reagisce più a nessuna pressione di tasto.

In questo stato, puoi premere Ctrl + C per uccidere il processo del server ed essere in grado di uscire less dopo premendo Q (che però per qualche motivo lascia il comando come processo interrotto nell'elenco dei lavori - devi eseguire fg per continuarlo e lasciarlo terminare completamente in seguito), ma questo è non ciò che desiderare.

Invece, puoi anche premere Ctrl + Z per fermare ("congelare") il comando e tornare al prompt della shell. Ora digita rapidamente il comando di shell fg (" f minerale g round") per consentire al comando di continuare a essere eseguito in primo piano. Tieni presente che anche il tuo processo node del server viene messo in pausa durante questo breve periodo, devi considerare se questo è accettabile o meno.

Quindi ora less è di nuovo in esecuzione in primo piano come prima, giusto? Sì, ma magicamente non è più in modalità "Avanti per sempre". Puoi usare ad es. i tasti freccia ancora per scorrere su e giù.

Sfortunatamente, less sembra aver smesso di aggiornare completamente il suo buffer, puoi solo scorrere fino alla riga in cui hai congelato il comando in precedenza, non più lontano. Il server node è ancora in esecuzione e produce output, dobbiamo solo recuperare less per aggiornarlo di nuovo.

Il modo più semplice per scoprirlo è aprire semplicemente la schermata di aiuto di less 'e chiuderla di nuovo, premendo i tasti H e Q in sequenza. Ora tutto sembra funzionare di nuovo bene.

La soluzione più pulita tuttavia è probabilmente quella di seguire la risposta di terdon e reindirizzare l'output in un file temporaneo, utilizzando less per monitorare il file.

    
risposta data Byte Commander 17.04.2017 - 15:42
2

Come dice la tua domanda:

  

Questo server si connette al terminale, non in alcun file.

Suppongo che tu non voglia usare un file di registro (temporaneo), forse il tuo log è enorme o per qualsiasi ragione tu abbia.

named pipe, fifo file.

Quello che mi è venuto in mente è usare un named pipe file noto anche come fifo file, questo file verrà utilizzato solo per reimportare i log su un valore inferiore e non verrà salvato nulla su di esso.

Crea innanzitutto un fifo file :

mkfifo mylog

Esegui il tuo server e reindirizza i log su questo file:

node server.js > mylog &

Usa meno per leggere i tuoi log (-f forza meno per leggere questo file speciale):

less -f mylog

Ora puoi usare shift + F per seguire, e CTRL + C per fermare il seguito, ma il server è ancora in esecuzione, puoi seguire di nuovo l'output con shift + F .

Piano di backup : se interrompe il server, inserisci il comando ( node server.js > mylog & ) in un file es .: server.sh , quindi invece di eseguire node server.js > mylog & run: bash server.sh > mylog & e quindi esegui less -f mylog .

    
risposta data Ravexina 17.04.2017 - 22:59

Leggi altre domande sui tag