Como pausar (ou capturar) as mensagens que voam no final da seqüência de inicialização?

7

No final da "seqüência de inicialização" 1 , vejo uma longa série de mensagens de diagnóstico voar muito rapidamente, logo antes de ver o prompt de login 2 .

AFAICT, a maioria, se não todas, as linhas que compõem essa saída de curta duração começam com uma das strings mostradas abaixo

[  OK  ]
[FAILED]

... onde o OK está em verde e o FAILED está em vermelho 3 .

Estas mensagens piscam muito brevemente para eu ler.

Minha pergunta é:

Is there a way to make these messages easier to read?

Possíveis soluções que vêm à mente incluem (em ordem de preferência):

  1. teeing (ou simplesmente redirecionando) essas mensagens verbatim 4 para algum arquivo de log persistente;
  2. ativando um mecanismo de tipo de paginação ( Press any key to continue... );
  3. inserindo uma pausa (de comprimento configurável) após essas mensagens serem impressas;
  4. ativando alguma tecla (ou combinação de teclas) para pausar a saída para a tela 5 .

EDIT: com base nos comentários que recebi até agora, devo concluir que a palavra textual em (1) acima não está sendo entendida, ou não está sendo levada a sério, embora eu tenho enfatizado o máximo que posso. Eu faria flash se eu pudesse ...

EDIT2: a sugestão que meuh deu nos comentários parece promissora para mim, mas eu não consegui para fazê-lo funcionar ainda. Aqui está o que eu fiz:

Primeiro, adicionei o seguinte no final de /etc/rsyslog.conf :

# Save boot messages also to boot.log
local7.* /var/log/boot.log

... e reiniciado. Eu vi as mensagens de diagnóstico habituais voarem, mas nenhum arquivo /var/log/boot.log foi criado.

Em seguida, no evento (reconhecidamente improvável) em que o /var/log/boot.log precisa existir antes de o rsyslog poder gravar nele, executei (como root):

touch /var/log/boot.log
chgrp adm /var/log/boot.log
chmod 640 /var/log/boot.log

... onde os comandos chgrp e chmod pretendiam que a propriedade e as permissões de /var/log/boot.log correspondessem às de todos os outros arquivos de log em /var/log . Então eu reiniciei, vi as mensagens, etc. O arquivo /var/log/boot.log permaneceu vazio após esta reinicialização.

(recebi o mesmo não resultado quando alterei as permissões de /var/log/boot.log para 666 .)

Eu grep 'editei a saída de journalctl --boot e os arquivos em /var/log para qualquer coisa que eu pudesse pensar que apontasse algo errado para meu rsyslog , mas não encontrei nada. (Eu não estou familiarizado com rsyslog , então tenho certeza que minha busca foi muito ineficaz.)

É claro que o que eu fiz até agora não é suficiente para permitir o registro desejado. Agora estou procurando o que quer que esteja faltando. Eu não consegui encontrar muita documentação relevante, no entanto. Por exemplo, nem rsyslog.conf(5) nem rsyslogd(8) se digna a explicar o que é local7 ( rsyslog.conf(5) é pelo menos gentil o suficiente para mencioná-lo uma vez, sem fornecer mais nenhuma informação).

EDIT3

Informações sobre distro:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.3 (jessie)
Release:    8.3
Codename:   jessie
$ uname -a
Linux myhost 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux

EDIT4

Informações adicionais potencialmente relevantes:

$ cat /lib/systemd/system/rsyslog.service
[Unit]
Description=System Logging Service
Requires=syslog.socket
Documentation=man:rsyslogd(8)
Documentation=http://www.rsyslog.com/doc/

[Service]
Type=notify
ExecStart=/usr/sbin/rsyslogd -n
StandardOutput=null
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=syslog.service
$ cat /proc/$(pgrep rsyslogd)/limits
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             128529               128529               processes 
Max open files            1024                 4096                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       128529               128529               signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        

$ sudo ls /proc/$(pgrep rsyslogd)/fd | wc -l
10

1 ou seja o que acontece quando eu (re) inicializo minha máquina.

2 FWIW, multi-user.target é meu padrão.

3 O texto restante é todo em branco sobre um fundo preto. Isso é verdade no prompt de login subseqüente.

4 Eu acho completamente inaceitável qualquer solução que não me deixe ver o texto exato dessas mensagens como elas apareceram durante a sequência de inicialização. Como, invariavelmente, eu não estou intimamente familiarizado com o que qualquer uma dessas mensagens de diagnóstico está referindo, não é possível reconhecer todas as maneiras pelas quais as informações subjacentes transmitidas pela mensagem original podem ser parafraseadas, espalhadas por várias outras mensagens. , incluído em outras mensagens, etc. (Apenas pesquisando on-line para o texto exato da mensagem original eu tenho alguma esperança de encontrar uma solução para o problema.) Tudo que eu tentei até agora, incluindo journalctl -b e dmesg falhou em me dar as mensagens originais verbatim . Por exemplo, quando executo a inicialização, só vejo um vermelho FAILED , mas journalctl --boot | grep FAILED | wc -l retorna 0 e journalctl --boot | grep -i FAILED | wc -l retorna 1086 . Nenhum destes é o que eu estou procurando.

5 No meu sistema, eu teria menos de um segundo para pressionar essa tecla ou combinação de teclas, e não há nenhum aviso de quando este breve intervalo começa. A menos que seja possível configurar a duração do intervalo durante o qual esse pressionamento de tecla deve acontecer, qualquer solução baseada em pressionamento de tecla é muito pouco prática para ser algo mais do que uma manobra de último recurso. Além disso, FWIW, tentei pressionar a tecla Scroll
Lock
ou a tecla Pausa / Interrupção quando as mensagens piscaram, mas nenhuma delas fez qualquer diferença. / sup>

    
por kjo 21.02.2016 / 18:46

1 resposta

1

Você poderia definir um argumento de linha de comando do kernel (algo como console=tty0 console=ttyS0,115200n8 ) para enviá-los para um console serial, e então o dispositivo que escuta na porta serial pode simplesmente registrá-lo, desde então é apenas um fluxo de texto .

E o systemd é bem bobo se não registra essas coisas de qualquer maneira. O Openrc faz isso em /var/log/rc.log. Além disso, se não fosse systemd, você provavelmente poderia modificar o inittab para não colocar um getty / Xorg lá no tty1, e impedir que qualquer coisa (como o Xorg) mudasse para outro lugar, e o texto antigo poderia ficar parado (assim como no velho) pré-systemd openSUSE). Ou copie-o para outro tty (que eu acho que é o syslog fazendo isso ao invés de inittab ... e você pode ver muitos instaladores linux fazendo isso no tty9 +) Se ele mudar e voltar, ele simplesmente não rolará para trás (shift + pgup ), mas provavelmente terá uma página de saída. Talvez alguém que saiba mais sobre o systemd saiba o novo equivalente ao inittab e você possa mudar isso.

    
por 31.05.2016 / 22:49