journalctl - para de seguir sem sair do pager

10

Se eu fizer:

journalctl -u my-service

em seguida, um Shift-Fa seguir ao paginação, como eu (interrupt to abort)sem sair do pager?

Com less, eu normalmente apenas ^C, mas se eu fizer isso no journalctl, ele sairá do pager inteiro.

MikeKusold
fonte

Respostas:

6

Você está usando lessnesse ponto, mas ^ C está se comportando de maneira diferente devido à forma como foi chamado journalctl. Os sinalizadores que journalctl passa para lessincluir os seguintes padrões:

 FRSXMK

Destes, acho que a opção "K" se aplica aqui:

-K ou --quit-on-intr Faz com que menos saia imediatamente (com status 2) quando um caractere de interrupção (geralmente ^ C) é digitado. Normalmente, um caractere de interrupção faz com que menos pare o que está fazendo e retorne ao prompt de comando. Observe que o uso dessa opção torna impossível retornar ao prompt de comando a partir do comando "F".

Portanto, definir $ SYSTEMD_LESS no seu ambiente e omitir a opção "K" deve resolver o problema, não funcionou no meu teste no Ubuntu 16.04:

 SYSTEMD_LESS="FRSXM"journalctl -u nginx

No entanto, você pode obter o comportamento que deseja confirmar que o sinalizador K está relacionado comparando o comportamento das seguintes variações:

# ^C after Shift-F does not completely quit
journalctl -u nginx | less -FRSXM

# ^C after Shift-F completely quits
journalctl -u nginx | less -FRSXMK
Mark Stosberg
fonte
Eu tenho a mesma definição de problema SYSTEMD_LESS, mas eu confirmou esta não alterar as bandeiras enviados para less. Você pode verificar encontrando o PID lesse o que está fazendo hd /proc/<pid>/environ. Procure a variável de ambiente LESS. Ele estará lá, mas vazio (normalmente está FRSXMK). Você também pode digitar _Kmenos para ver se esse sinalizador está definido. Normalmente é. Se você passar SYSTEMD_LESS=, não é. Eu acho que o processo journalctl está sinalizando o pager quando é recebido SIGINT, e é por isso que lessmorre independentemente dessa configuração.
Aqui está uma prova de conceito hacky que mostra como você pode contornar isso: gist.github.com/chriskuehl/9ab4c74c19f2f4cb883744171335ac44
0

Eu também apenas experimentei essa peculiaridade irritante.
A configuração SYSTEMD_LESSrealmente não funciona porque o journalctl envia um SIGTERMpara o pager quando recebe um ^ C.

Minha "solução" era usar um alias do bash assim:

alias log='SYSTEMD_COLORS=1 journalctl | less -FRSXM'

Isso substitui o pager padrão e não sai quando você interrompe o procedimento.
A variável de ambiente SYSTEMD_COLORSparece ser a única maneira de ter cores e manter menos execução após a SIGINT.

Isso funciona na minha instalação do Debian 9.

clst
fonte
Hmm, isso parou de seguir. Mas o mesmo aconteceu journalctl | less, pode ser um bug.
CLST