Como ler as mensagens de desligamento depois?

18

Estou usando o Lubuntu 11.10. Toda vez que eu desligo, posso ler FAIL em letras vermelhas, mas não consigo ler mais.

Então, como ler as mensagens de log e tentar resolver o problema?

Sigur
fonte
Dê uma olhada nesta resposta no askubuntu. Isso pode ajudá-lo com o seu problema.
Solde9
tudo registrado em /var/log/sysloge /var/log/messages, Então você precisa lê-los e solucionar problemas. Você pode usar io redirectioncom error redirectionquando você usashutdown command
Golfo Pérsico

Respostas:

14

Parece não haver maneira de registrar esses dados em um arquivo. Para o processo de inicialização, existe o bootlogdpacote que cria o arquivo /var/log/boot, mas nada para o processo de desligamento / reinicialização. Tanto quanto posso ver, também não há como fazer logon rsyslog, e mesmo que houvesse, há mensagens impressas após a rsysloginterrupção. Parte do meu processo de desligamento / reinicialização é remontar os rootfs somente leitura e montar todo o resto, depois que esse registro em um arquivo que ainda estará lá na próxima inicialização é praticamente impossível.

A maneira mais fácil de ver as mensagens é editar os scripts /etc/init.d/halte / ou /etc/init.d/rebootpausar antes do halt/ real reboot. Para o haltscript, execute o comando sudoedit /etc/init.d/halt(ou use um editor de GUI) e procure a linha que faz a parada real. Para mim, esta é a linha:

halt -d -f $netdown $poweroff $hddown

Caso contrário, deve estar no final da do_stopfunção e a única linha que chama o haltcomando. Depois de encontrar a linha, basta inserir uma nova linha acima com o seguinte:

read -p "Press enter to halt" reply

Salve o arquivo e saia. Agora, quando você desligar, o sistema fará uma pausa até você pressionar enter (ou CTRL-C, CTRL-D, etc). Você pode ler as mensagens impressas na tela. Se houver mais de uma única tela de texto, você poderá ver a rolagem do terminal pressionando Shift+PgUp. Se isso ainda não for suficiente, existem maneiras de aumentar o tamanho do buffer de rolagem (talvez uma pergunta diferente).

Para fazer o mesmo quando o sistema reiniciar, você precisará editar o /etc/init.d/rebootarquivo. O comando usado aqui é obviamente rebootoposto halte deve estar novamente no final da do_stopfunção. Para mim, a linha é:

reboot -d -f -i

Novamente, basta inserir o seguinte em uma nova linha acima:

read -p "Press enter to reboot" reply

Observe também que esses arquivos estão listados como arquivos de configuração do initscriptspacote. Essas edições não serão derrotadas por padrão quando os pacotes forem atualizados, embora causem um conflito.


Uma solução mais completa seria usar o seguinte script:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          pause_hook
# Required-Start:
# Required-Stop:     halt reboot
# Default-Start:
# Default-Stop:      0 6
# X-Stop-After:      umountroot
# X-Interactive:     true
# Short-Description: Pause before halt or reboot
# Description:
### END INIT INFO

do_stop () {
    [ -r /etc/pause_hook.conf ] && . /etc/pause_hook.conf

    [ "$PAUSE_HOOK_ENABLED" = true ] && read -p "Press enter to continue" reply
}

case "$1" in
    start)
        # No-op
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        do_stop
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

Isso deve ser colocado /etc/init.d/pause_hooke pode ser ativado para ser executado no encerramento / reinicialização com o seguinte comando:

sudo update-rc.d pause_hook defaults

Para ativar o gancho real, crie os arquivos que /etc/pause_hook.confcontêm a linha:

PAUSE_HOOK_ENABLED=true

O processo de desligamento / reinicialização agora deve pausar antes da chamada do script haltou reboot, dando tempo para exibir as mensagens. Também pode ser facilmente desativado / reativado comentando / descomentando a linha de ativação /etc/pause_hook.conf. Também não haverá dpkgconflitos de conffile durante as atualizações dessa maneira.

Graeme
fonte
Uma solução bastante agradável, especialmente o script init.
Mikhail Morfikov
4

A solução mais fácil pode ser tentar gravar um vídeo em vez de uma fotografia. Você pode percorrê-lo quadro a quadro mais tarde.

Jim Paris
fonte
2
Não acredito que não exista arquivo com essas mensagens gravadas !!! Vou tentar gravar por vídeo.
Sigur
7
Algumas dessas mensagens são impressas depois que os sistemas de arquivos são desmontados! Portanto, eles não podem acabar em um arquivo.
Jim Paris
4

Vendo o log em tempo real

Descobri que, durante o desligamento, geralmente há um logotipo do Ubuntu e luzes piscando, que são mostradas em vez de um log do processo de desligamento. Se houver erros, eles serão mostrados, mas de maneira confusa. No entanto, durante o desligamento, se eu pressionar a tecla Windows e r( Metar), vejo o sucesso e a falha dos serviços do sistema, à medida que ocorrem. Então eu sei o que exatamente está quebrado. Não faço ideia se esse atalho de teclado é específico da minha configuração do Kubuntu ou o quê; Não o adicionei .. Um dos que encontrei por acidente, de alguma forma ...

Visualizando os logs após a reinicialização

Quando o sistema é reiniciado, as mensagens de erro devem ser salvas em um arquivo de log. Qual arquivo de log depende de qual serviço está quebrado / configurado incorretamente. O log relevante estará quase definitivamente dentro /var/log/(ou um subdiretório). ls, less, grepE findforam os únicos programas que eu necessários para encontrar mensagens de erro nos logs ...

Depois de encontrar o erro e o serviço que o causou, não será necessário reiniciar para testar a nova configuração; basta reiniciar o serviço. Espero que você possa testar a configuração fixa com um comando como:

sudo service <service name> restart

Alex Leach
fonte
É Windows + r ou Alt + r que você está pressionando? Os mapeamentos padrão mapeiam a chave do Windows para super e a meta-chave para alt, de modo que não está claro exatamente qual chave você está descrevendo.
Casey
3

Depois de analisar como bootlogdrealmente consegue fazer o log, verifica-se que pode ser persuadido a registrar o processo de desligamento / reinicialização, bem como o processo de inicialização. bootlogdé iniciado no início do processo de inicialização. Em seguida, ele faz um pouco de magia com ttye ptsdispositivos para registrar todas as saídas para o terminal é ligado. Em seguida, é interrompido mais tarde no processo de inicialização, presumivelmente antes de começar a registrar a saída de um usuário que trabalha no tty.

Se bootlogdfor acionado novamente durante o processo de desligamento / reinicialização e parado antes de qualquer sistema de arquivos que contém o log ser desmontado, haverá um registro da maior parte do processo de desligamento disponível para leitura na próxima inicialização.

bootlogdconsegue ser iniciado e parado durante a inicialização, tendo dois initscripts. Um é um initscript normal que inicia / interrompe o processo normalmente. O outro é um initscript 'invertido' , pois quando chamado com start, chama o primeiro script com stop. Isso 'engana' o sysvinitprocesso, parece que ele está iniciando dois serviços separados quando está realmente iniciando e parando o mesmo serviço. Isso é necessário para garantir que tudo aconteça na ordem certa.

Para bootlogdexecutar a execução durante o desligamento, é necessário:

  1. Instale bootlogdse você ainda não o fez.
  2. Copie os dois scripts init
  3. Faça a alteração do script 'invertido' parar para iniciar em vez de começar para parar.
  4. Altere os cabeçalhos LSB para que os dois scripts sejam executados nos momentos certos durante o desligamento / reinicialização
  5. Instale-os com update-rc.d.

Aqui estão minhas alterações como um bashscript de copiar / colar (se você quiser fazer as alterações manualmente, os cabeçalhos LSB que usei estão no patch):

cd /etc/init.d
cp bootlogd shutdown-bootlogd
cp stop-bootlogd shutdown-start-bootlogd

echo -e 'diff -ur ./shutdown-bootlogd /etc/init.d/shutdown-bootlogd
--- ./shutdown-bootlogd\t2014-02-20 13:59:23.426109512 +0000
+++ /etc/init.d/shutdown-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,14 +1,13 @@
 #! /bin/sh
-### BEGIN INIT INFO
-# Provides:          bootlogd
-# Required-Start:    mountdevsubfs
-# X-Start-Before:    hostname keymap keyboard-setup procps pcmcia hwclock hwclockfirst hdparm hibernate-cleanup lvm2
-# Required-Stop:
-# Default-Start:     S
-# Default-Stop:
-# Short-Description: Start or stop bootlogd.
-# Description:       Starts or stops the bootlogd log program
-#                    which logs boot messages.
+### BEGIN INIT INFO 
+# Provides:          shutdown-bootlogd 
+# Required-Start:
+# Required-Stop:     umountroot halt reboot 
+# Default-Start:      
+# Default-Stop:      0 6 
+# X-Stop-After:      umountfs 
+# Short-Description: Stop bootlogd at shutdown. 
+# Description: 
 ### END INIT INFO

 PATH=/sbin:/bin  # No remote fs at start
diff -ur ./shutdown-start-bootlogd /etc/init.d/shutdown-start-bootlogd
--- ./shutdown-start-bootlogd\t2014-02-20 13:59:23.430107513 +0000
+++ /etc/init.d/shutdown-start-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,24 +1,24 @@
 #! /bin/sh
 ### BEGIN INIT INFO
-# Provides:          stop-bootlogd
-# Required-Start:    $local_fs $all
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:
-# Short-Description: Stop bootlogd
-# Description:       See the init.d/bootlogd script
+# Provides:          shutdown-start-bootlogd
+# Required-Start:
+# Required-Stop:     $local_fs $all
+# Default-Start:
+# Default-Stop:      0 6
+# Short-Description: Start or stop bootlogd at shutdown.
+# Description:
 ### END INIT INFO

-NAME=stop-bootlogd
+NAME=shutdown-start-bootlogd
 DAEMON=/sbin/bootlogd

 [ -x "$DAEMON" ] || exit 0

 case "$1" in
-  start)
-\t/etc/init.d/bootlogd stop
+  stop)
+\t/etc/init.d/bootlogd start
 \t;;
-  stop|restart|force-reload)
+  start|restart|force-reload)
 \t# No-op
 \t;;
   status)
' | patch

update-rc.d shutdown-bootlogd defaults
update-rc.d shutdown-start-bootlogd defaults

Todas as mensagens que aparecem antes de bootlogdserem interrompidas serão armazenadas /var/log/boot. bootlogdremove os caracteres de escape do fluxo de texto. O bashcomando a seguir ( ) exibirá a cor de logon, como aparece durante o desligamento:

sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot | less -r

Consulte esta pergunta para obter mais detalhes sobre isso - /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

A localização do log pode ser alterada editando mais os scripts. Infelizmente toda a aparência do arquivo deve ser alterado (também, a substituição /ver/log/bootnão é suficiente que o script faz um cda /var/logem um ponto).

O acima também funcionará apenas se /var/logestiver no rootfs. Caso contrário, as dependências precisam ser retrabalhadas para que isso umountfsseja feito depois que a bootlogdparada for interrompida. Ou faça logon em um arquivo no rootfs.

Graeme
fonte
1

Você precisa editar todos os arquivos /etc/rc6.d/* e redirecionar sua saída para algum arquivo, que poderá ser lido posteriormente.

Esse redirecionamento também informa qual programa failede why.

Além disso, você deve modificar o parâmetro start-stop-daemonremovendo --quiete adicionando -vparâmetros em todos esses arquivos.

Se você estiver fazendo isso, certifique-se de reverter todas as alterações feitas. Fazer backup dos arquivos existentes antes de fazer alterações será uma boa ideia.

SHW
fonte
ESTÁ BEM. Isso vai exigir muito trabalho de mim. Vou tentar. Obrigado.
Sigur 18/02
Deixe-me saber o resultado então
SHW
A edição de sripts em /etc/init.d(tudo nos /etc/rc?.dlinks aqui) não fará nada. A saída não é direta, é através das funções /lib/lsb/init-functionse outros arquivos que, por sua vez, origina. Você pode editá-los, mas algumas atualizações eliminariam as alterações.
Graeme
A única função ou binário relevante é start-stop-daemondo POs POV. Agora aguardando sua resposta
SHW
@ SHW Não, veja os scripts. A maior parte da saída vem de outras partes do script. Eu não acho que start-stop-daemonproduz qualquer saída, pelo menos não normalmente. Os scripts geram saída ok / falha com base em sua saída de retorno usando log_end_msg. Veja /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme
0

/var/log/messagesfornecerá os dados necessários. se não for suficiente para você, modifique /etc/syslog.confpara registrar todos os dados (eu gostaria de habilitar o log de erros do kernel, também conhecido como * kern), mas REVERTE-O DE VOLTA depois que você reiniciar, ou isso consumirá muito espaço para os logs

kaboom
fonte
Não existe /etc/syslog.conf. Existem apenas sysctl.conf sysctl.d/ systemd/.
Sigur 17/02
1
tente /etc/rsyslog.conf
kaboom
0

Para o meu laptop sudo haltfará o desligamento do software, não o hardware. ou seja, a tela e outro hardware permanecem em execução. A última mensagem na tela será

Sistema interrompido

Nesse ponto, basta pressionar o botão Liga / Desliga e tudo o mais. Você pode tentar isso. Você também pode tentarsudo halt --verbose

totti
fonte
Então, acho que esse é um processo totalmente seguro. Nenhum dano ao hardware ?!
Sigur 18/02
0

Como Graeme disse, com ro ou sistema de arquivos desmontado, matou o klogd, não há como gravar essas informações em um arquivo. Uma solução pode estar usando um console (porta serial), definido em bootargs. Basta conectar o cabo do modem nulo e outro PC (tablet ou smartphone com adaptador apropriado) e o emulador de terminal.

fich
fonte
-1

As mensagens de erro (e outras) geralmente são ocultadas por plymouthrazões estéticas.

Talvez isso ajude: Se você pressionar ESC durante o desligamento, plymouthmostra o console gráfico. Isso mostra mensagens úteis?

Além disso, há pouco o que fazer se a máquina realmente travar porque talvez não seja capaz de gravar o arquivo de log - seja em buffer ou /var/logjá remontado como somente leitura, dependendo de quando a falha ocorrer. Você pode examinar esses arquivos executando ls -ltr /var/loge verificando se existe um arquivo de log que corresponda à sua data de encerramento (ou mais recente).

Robert Dinse
fonte