Como ler as mensagens durante o desligamento

15

Estou usando o Lubuntu 11.10. Toda vez que eu desligo o meu Sony Vaio eu posso ler FAIL em letras vermelhas. Mas eu não sei ler. Eu tentei tirar uma foto, mas não sucesso.

Bem, eu não estava preocupado com isso, mas hoje meu laptop congelou durante o desligamento. Eu poderia ler algo sobre umount e outras mensagens que não me lembro.

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

    
por Sigur 29.10.2012 / 22:55

7 respostas

13

Parece não haver maneira de registrar esses dados em um arquivo. Para o processo de inicialização, há o pacote bootlogd que cria o arquivo /var/log/boot , mas nada para o processo de desligamento / reinicialização. Tanto quanto eu posso ver, não há como registrar com rsyslog , e mesmo se houvesse, há mensagens impressas depois que rsyslog é interrompido. Parte do meu processo de desligamento / reinicialização é remontar o rootfs readonly e desmontar todo o resto, depois que esse registro em um arquivo que ainda estará lá na próxima inicialização é virtualmente impossível.

A maneira mais fácil de ver as mensagens é editando os scripts /etc/init.d/halt e / ou /etc/init.d/reboot para pausar um pouco antes do real halt / reboot . Para o script halt , 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 função do_stop e a única linha que chama o comando halt . 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é que você pressione enter (ou CTRL-C, CTRL-D, etc). Você pode ler as mensagens impressas na tela. Se houver mais de uma única tela cheia 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 é reinicializado, você precisa editar o arquivo /etc/init.d/reboot . O comando usado aqui é obviamente reboot em oposição a halt e deve estar novamente no final da função do_stop . Para mim a linha é:

reboot -d -f -i

Novamente, insira o seguinte em uma nova linha acima:

read -p "Press enter to reboot" reply

Note também que estes arquivos são listados como arquivos de configuração para o pacote initscripts . Essas edições não serão prejudicadas 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 em /etc/init.d/pause_hook e pode ser ativado para ser executado no desligamento / reinicialização com o seguinte comando:

sudo update-rc.d pause_hook defaults

Para ativar o gancho real, crie os arquivos /etc/pause_hook.conf contendo a linha:

PAUSE_HOOK_ENABLED=true

O processo de desligamento / reinicialização deve pausar imediatamente antes do script halt ou reboot ser chamado, dando tempo para exibir as mensagens. Ele também pode ser facilmente desativado / reativado, comentando / descomentando a linha de ativação em /etc/pause_hook.conf . Também não haverá conflitos de conffile dpkg durante as atualizações dessa maneira.

    
por 17.02.2014 / 22:59
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.

    
por 30.10.2012 / 00:51
4

Ver o log em tempo real

Descobri que durante o desligamento normalmente há um logotipo do Ubuntu e luzes piscantes, que são mostradas em vez de um log do processo de desligamento. Se houver erros, então eles são exibidos, mas confusos. No entanto, enquanto desligando, se eu pressionar a tecla Windows e r ( Meta r ), então eu vejo o sucesso e a falha dos serviços do sistema, como eles ocorrem. Então eu sei exatamente o que está quebrado. Não faço ideia se este atalho de teclado é específico para minha configuração do Kubuntu ou o quê; Eu não acrescentei ... Um desses que encontrei por acaso, de alguma forma ...

Visualizar os registros após a reinicialização

Quando o sistema é reinicializado, as mensagens de erro devem ser salvas em um arquivo de log. Qual arquivo de log depende de qual serviço está quebrado / mal configurado. O log relevante será quase definitivamente em /var/log/ (ou um subdiretório dele). ls , less , grep e find foram os únicos programas que eu precisei para encontrar mensagens de erro nos logs ...

Após encontrar o erro e o serviço que o causou, não será necessário reinicializar para testar a nova configuração. apenas reinicie o serviço .. Espero que você possa testar a configuração fixa com um comando como:

sudo service <service name> restart

    
por 30.10.2012 / 02:05
2

Depois de analisar como o bootlogd realmente consegue fazer o registro, verifica-se que ele 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 alguma mágica com os dispositivos tty e pts para registrar todas as saídas no terminal ao qual está conectado. É então interrompido mais tarde no processo de inicialização, presumivelmente antes de começar a registrar a saída de um usuário trabalhando no tty .

Se bootlogd for acionado novamente durante o processo de desligamento / reinicialização e interrompido antes do 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.

bootlogd consegue ser iniciado e interrompido durante a inicialização com dois scripts init . Um é um script init normal que inicia / interrompe o processo normalmente. O outro é um script ' init ' invertido 'em que, quando chamado com start , ele chama o primeiro script com stop. Isso 'engana' o processo sysvinit , parece que ele está iniciando dois serviços separados quando está realmente iniciando e interrompendo o mesmo serviço. Isso é necessário para garantir que tudo ocorra na ordem correta.

Para que bootlogd seja executado durante o desligamento, o que é necessário é:

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

Aqui estão as minhas alterações como um script copy / paste bash (se você quiser fazer as alterações manualmente, os cabeçalhos LSB que eu 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 bootlogd ser interrompido serão armazenadas em /var/log/boot . bootlogd remove os caracteres de escape do fluxo de texto. O comando a seguir ( bash ) exibirá a cor de login, como aparece durante o desligamento:

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

Veja esta pergunta para mais detalhes sobre isso - link

A localização do log pode ser alterada editando-se os scripts. Infelizmente, toda a aparência do arquivo deve ser alterada (também, substituir /ver/log/boot não é suficiente, pois o script faz um cd to /var/log em um ponto).

O acima também só funcionará se /var/log estiver no rootfs. Se não, as dependências precisam ser retrabalhadas para que umountfs seja feito após bootlogd ser interrompido. Ou então logar em um arquivo no rootfs.

    
por 20.02.2014 / 15:49
1

Você precisa editar todos os arquivos /etc/rc6.d/* e redirecionar sua saída para algum arquivo, que você pode ler mais tarde.

Esse redirecionamento também informará a você qual programa failed e why .

Além disso, você precisa modificar o parâmetro start-stop-daemon removendo o parâmetro --quiet e adicionando o parâmetro -v em todos esses arquivos.

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

    
por 18.02.2014 / 10:31
0

/var/log/messages fornecerá os dados de que você precisa. se não for o suficiente para você, modifique /etc/syslog.conf para registrar todos os dados (gostaria de ativar o registro de erros do kernel, também conhecido como * kern), mas REVERT IT BACK após a reinicialização ou ele consumirá muito de espaço para os logs

    
por 17.02.2014 / 13:41
0

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

System halted

Neste ponto, basta pressionar o botão Power e tudo desligado. Você pode tentar isso. Você também pode tentar sudo halt --verbose

    
por 18.02.2014 / 10:14