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.
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:
É 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:
Instale bootlogdse você ainda não o fez.
Copie os dois scripts init
Faça a alteração do script 'invertido' parar para iniciar em vez de começar para parar.
Altere os cabeçalhos LSB para que os dois scripts sejam executados nos momentos certos durante o desligamento / reinicialização
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
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.
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.
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
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
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.
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).
/var/log/syslog
e/var/log/messages
, Então você precisa lê-los e solucionar problemas. Você pode usario redirection
comerror redirection
quando você usashutdown command
Respostas:
Parece não haver maneira de registrar esses dados em um arquivo. Para o processo de inicialização, existe o
bootlogd
pacote 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 logonrsyslog
, e mesmo que houvesse, há mensagens impressas após arsyslog
interrupçã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/halt
e / ou/etc/init.d/reboot
pausar antes dohalt
/ realreboot
. Para ohalt
script, execute o comandosudoedit /etc/init.d/halt
(ou use um editor de GUI) e procure a linha que faz a parada real. Para mim, esta é a linha:Caso contrário, deve estar no final da
do_stop
função e a única linha que chama ohalt
comando. Depois de encontrar a linha, basta inserir uma nova linha acima com o seguinte: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/reboot
arquivo. O comando usado aqui é obviamentereboot
opostohalt
e deve estar novamente no final dado_stop
função. Para mim, a linha é:Novamente, basta inserir o seguinte em uma nova linha acima:
Observe também que esses arquivos estão listados como arquivos de configuração do
initscripts
pacote. 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:
Isso deve ser colocado
/etc/init.d/pause_hook
e pode ser ativado para ser executado no encerramento / reinicialização com o seguinte comando:Para ativar o gancho real, crie os arquivos que
/etc/pause_hook.conf
contêm a linha:O processo de desligamento / reinicialização agora deve pausar antes da chamada do script
halt
oureboot
, 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ádpkg
conflitos de conffile durante as atualizações dessa maneira.fonte
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.
fonte
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
,grep
Efind
foram 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
fonte
Depois de analisar como
bootlogd
realmente 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 comtty
epts
dispositivos 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 notty
.Se
bootlogd
for 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.bootlogd
consegue ser iniciado e parado durante a inicialização, tendo doisinit
scripts. Um é uminit
script normal que inicia / interrompe o processo normalmente. O outro é uminit
script 'invertido' , pois quando chamado comstart
, chama o primeiro script com stop. Isso 'engana' osysvinit
processo, 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
bootlogd
executar a execução durante o desligamento, é necessário:bootlogd
se você ainda não o fez.update-rc.d
.Aqui estão minhas alterações como um
bash
script de copiar / colar (se você quiser fazer as alterações manualmente, os cabeçalhos LSB que usei estão no patch):Todas as mensagens que aparecem antes de
bootlogd
serem interrompidas serão armazenadas/var/log/boot
.bootlogd
remove os caracteres de escape do fluxo de texto. Obash
comando a seguir ( ) exibirá a cor de logon, como aparece durante o desligamento: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/boot
não é suficiente que o script faz umcd
a/var/log
em um ponto).O acima também funcionará apenas se
/var/log
estiver no rootfs. Caso contrário, as dependências precisam ser retrabalhadas para que issoumountfs
seja feito depois que abootlogd
parada for interrompida. Ou faça logon em um arquivo no rootfs.fonte
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
failed
ewhy
.Além disso, você deve modificar o parâmetro
start-stop-daemon
removendo--quiet
e adicionando-v
parâ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.
fonte
/etc/init.d
(tudo nos/etc/rc?.d
links aqui) não fará nada. A saída não é direta, é através das funções/lib/lsb/init-functions
e outros arquivos que, por sua vez, origina. Você pode editá-los, mas algumas atualizações eliminariam as alterações.start-stop-daemon
do POs POV. Agora aguardando sua respostastart-stop-daemon
produz qualquer saída, pelo menos não normalmente. Os scripts geram saída ok / falha com base em sua saída de retorno usandolog_end_msg
. Veja/lib/lsb/init-functions.d/20-left-info-blocks
./var/log/messages
fornecerá os dados necessários. se não for suficiente para você, modifique/etc/syslog.conf
para 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 logsfonte
/etc/syslog.conf
. Existem apenassysctl.conf sysctl.d/ systemd/
.Para o meu laptop
sudo halt
fará 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áNesse ponto, basta pressionar o botão Liga / Desliga e tudo o mais. Você pode tentar isso. Você também pode tentar
sudo halt --verbose
fonte
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.
fonte
As mensagens de erro (e outras) geralmente são ocultadas por
plymouth
razões estéticas.Talvez isso ajude: Se você pressionar ESC durante o desligamento,
plymouth
mostra 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/log
já remontado como somente leitura, dependendo de quando a falha ocorrer. Você pode examinar esses arquivos executandols -ltr /var/log
e verificando se existe um arquivo de log que corresponda à sua data de encerramento (ou mais recente).fonte