Estou executando um servidor e o log desse servidor é registrado no terminal, não em nenhum arquivo. Eu gostaria de usar menos para visualizar este log.
node server.js | less
Quando eu apenas quero ver o log, uso a tecla Shift+ Fpara chegar ao final do arquivo e continuar assistindo os logs. Quando quero pará-lo, 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?
command-line
pipe
less
Ajay Kumar
fonte
fonte
less
e retornar ao prompt do shell com onode
servidor em execução em segundo plano ou apenas desejaless
voltar ao modo normal de não seguir, em que é possível rolar pelo log em vez de observar as últimas linhas?Respostas:
Não consigo encontrar nenhuma maneira de sair do
F
modoless
, então você precisará usar uma solução alternativa. Por exemplo, salve a saída em um arquivo tmp e observe o arquivo tmp:O
&
faz com que onode.js
comando executado em segundo plano. Isso significa queless tmpfile
será iniciado imediatamente e rastreará o arquivo tmp.Uma vez dentro
less
, você pode pressionar Fpara entrar no modo de acompanhamento, mas agora não Ctrl+ Cmata o servidor, ele apenas interrompe o acompanhamento. Agora você pode rolar como quiser e pressionar Fpara continuar.fonte
Parece que você normalmente não deve sair do modo "Encaminhar para sempre", que é como o manual
man less
nomeia o modo que você entra ao pressionar Shift+ F.No entanto, achei um truque sujo como você pode voltar ao normal de qualquer maneira. Ele congelará brevemente o comando, portanto, não tenho certeza se seria adequado para o servidor, o que provavelmente deve ser executado ininterruptamente.
Enfim, aqui está o truque:
Eu suponho que você já começou
node server.js | less
e pressionou Shift+ Fpara entrar no modo "Avançar para sempre". Agoraless
não está mais reagindo a nenhum pressionamento de tecla.Nesse estado, você pode pressionar Ctrl+ Cpara interromper o processo do servidor e poder sair
less
depois pressionando Q(que, por algum motivo, deixará o comando como processo parado na sua lista de tarefas - você deve executarfg
para continuar e deixá-lo completamente depois)), mas não é isso que queremos.Em vez disso, você também pode pressionar Ctrl+ Zpara interromper ("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 onode
processo do servidor também está pausado durante esse curto período de tempo; 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 "Encaminhar para sempre". Você pode usar, por exemplo, as teclas de seta novamente para rolar para cima e para baixo.Infelizmente,
less
parece que você parou de atualizar completamente seu buffer. Você pode rolar para baixo até a linha na qual congelou o comando anteriormente, e não mais. Onode
servidor ainda está em execução e produzindo saída, apenas precisamosless
atualizar novamente.A maneira mais fácil de fazer isso é simplesmente abrir
less
a tela de ajuda e fechá-la novamente, pressionando as teclas He Qsequencialmente. Agora tudo parece estar funcionando bem novamente.A solução mais limpa, no entanto, é provavelmente seguir a resposta de terdon e redirecionar a saída para um arquivo temporário, usando-o
less
para monitorar o arquivo.fonte
%
vez defg
; Acho mais fácil / rápido digitar. Também parece queF
(shift-f) ainda funciona mesmo sem fazer ohq
truque. Agradável! Agora, quando estou seguindo os logs, possoctrl-z
%
Enter
fazer o meu menos e voltar ao seguinte pressionandoF
!less
o seguinte recurso em vários terminais ao mesmo tempo.TSTP
sinal interrompe a chamada do sistema de leitura que aguardava a chegada de novos dados;less
recebe 0 bytes e conclui que a saída terminou. Para evitar a pausa do servidor, abra uma nova janela do terminal; executarps
e identificar a identificação doless
processo; então digitekill -TSTP <PID>; kill -CONT <PID>
. Dessa forma, os sinais devem ser transmitidos sem demora enquanto você digita.kill
, basta enviar o SIGINT. Então você não precisará enviarCONT
eless
está apenas esperando por você.Como sua pergunta diz:
Suponho que você não queira usar um arquivo de log (temp), talvez o seu registro seja enorme ou por qualquer motivo.
Pipe nomeado,
fifo
arquivo.O que eu inventei é usar um arquivo
named pipe file
também conhecido comofifo
arquivo, esse arquivo será usado apenas para canalizar menos os logs e nada será salvo nele.Primeiro, crie um
fifo file
:Execute seu servidor e redirecione os logs para este arquivo:
Use menos para ler seus logs (-f força menos para ler este arquivo especial):
Agora você pode usar shift+ Fpara seguir e CTRL+ Cpara interromper, mas o servidor ainda está em execução, você pode seguir a saída novamente com shift+ F.
Plano de backup : se ele parou o servidor, basta colocar seu comando (
node server.js > mylog &
) em um arquivo, por exemplo: :server.sh
, em vez de executar,node server.js > mylog &
execute:bash server.sh > mylog &
e, em seguida, execute oless -f mylog
.fonte
logrotate
.