Como posso parar de seguir a saída em menos, sem afetar o comando que gera a saída?

8

Estou executando um servidor e o log desse servidor é logado no terminal, não em qualquer arquivo. Eu gostaria de usar menos para ver este log.

node server.js | less

Quando eu quero apenas ver o log, eu uso pressione Shift + F para chegar ao fim do arquivo e continuar observando os logs. Quando eu quiser parar, eu uso CTRL + C .

Infelizmente, isso também interrompe o servidor. Eu só quero parar de assistir o final do log sem parar o servidor.

Como fazer isso?

    
por Ajay Kumar 17.04.2017 / 14:20

3 respostas

13

Não consigo encontrar uma maneira de sair do modo F em less , por isso você terá que usar uma solução alternativa. Por exemplo, salve a saída em um arquivo tmp e observe o arquivo tmp:

node server.js > tmpfile & less tmpfile

O & torna o comando node.js executado em segundo plano. Isso significa que less tmpfile será iniciado imediatamente e rastreará o tmpfile.

Uma vez em less , você pode pressionar F para entrar no modo follow, mas agora Ctrl + C não mata o servidor, só vai parar o seguinte. Agora você pode rolar como quiser e pode pressionar F para continuar seguindo.

    
por terdon 17.04.2017 / 15:16
10

Parece que você normalmente não deveria sair do modo "Forward forever", que é como o manual man less nomeia o modo que você entra ao pressionar Shift + F .

No entanto, eu encontrei um pequeno truque sujo como você pode voltar ao normal de qualquer maneira. Ele irá congelar brevemente o comando, por isso não tenho certeza se seria adequado para o seu servidor, que provavelmente deve ser executado sem interrupções.

De qualquer forma, aqui está o truque:

Eu assumo que você iniciou node server.js | less alredy e pressionou Shift + F para entrar no modo "Avançar para sempre". Agora less não está mais reagindo a nenhum pressionamento de tecla.

Neste estado, você pode pressionar Ctrl + C para eliminar o processo do servidor e poder sair depois less pressionando Q (o que, no entanto, deixará o comando como processo interrompido em sua lista de tarefas por algum motivo - você tem que executar fg para continuá-lo e terminá-lo completamente), mas isso não é quer.

Em vez disso, você também pode pressionar Ctrl + Z para parar ("congelar") o comando e retornar ao prompt do shell. Agora digite rapidamente o comando shell fg (" f ore g round") para permitir que o comando continue sendo executado em primeiro plano. Observe que o processo node do servidor também está pausado durante esse curto período, você deve considerar se isso é aceitável ou não.

Então agora less está sendo executado em primeiro plano novamente como antes, certo? Sim, mas magicamente não está mais no modo "Avançar para sempre". Você pode usar, por exemplo, as teclas de seta novamente para rolar para cima e para baixo.

Infelizmente, less parece ter parado completamente de atualizar seu buffer, você só pode rolar até a linha na qual você congelou o comando anteriormente, não mais adiante. O servidor node ainda está sendo executado e produzindo saída, mas precisamos recuperar less novamente.

A maneira mais fácil de fazer isso é simplesmente abrir a tela de ajuda less 'e fechá-la novamente, pressionando as teclas H e Q sequencialmente. Agora tudo parece estar funcionando bem novamente.

A solução mais limpa, no entanto, provavelmente é seguir resposta de terdon e redirecionar a saída para um arquivo temporário, usando less para monitorar o arquivo.

    
por Byte Commander 17.04.2017 / 15:42
2

Como sua pergunta diz:

  

Este servidor é logado no terminal, não em qualquer arquivo.

Suponho que você não queira usar um arquivo de log (temp), talvez seu log seja enorme ou por qualquer motivo que tenha.

Canal nomeado, fifo file.

O que eu criei é usar um arquivo named pipe file , também conhecido como fifo , este arquivo só será usado para canalizar seus logs para menos e nada será salvo nele.

Primeiro, crie um fifo file :

mkfifo mylog

Execute o seu servidor e redirecione os registros para este arquivo:

node server.js > mylog &

Use menos para ler seus logs (-f força menos a ler este arquivo especial):

less -f mylog

Agora você pode usar shift + F , e CTRL + C para parar o seguinte, mas o servidor ainda está rodando, você pode seguir a saída novamente com shift + F .

Plano de backup : Se ele parou seu servidor, basta colocar seu comando ( node server.js > mylog & ) em um arquivo, por exemplo: server.sh , em vez de executar node server.js > mylog & run: bash server.sh > mylog & e em seguida, execute o less -f mylog .

    
por Ravexina 17.04.2017 / 22:59