Come leggere i messaggi di spegnimento in seguito?


18

Sto usando Lubuntu 11.10. Ogni volta che spengo posso leggere FAIL in lettere rosse, ma non riesco a leggere di più.

Quindi, come leggere i messaggi di registro e provare a risolvere il problema?


Dai un'occhiata a questa risposta su askubuntu. Potrebbe aiutarti con il tuo problema.
solde9,

tutto recored in /var/log/sysloge /var/log/messages, quindi è necessario leggerli e risolvere i problemi. È possibile utilizzare io redirectioncon error redirectionquando si utilizzashutdown command
Golfo Persico

Risposte:


14

Sembra che non ci sia modo di registrare questi dati in un file. Per il processo di avvio, esiste il bootlogdpacchetto che crea il file /var/log/boot, ma nulla per il processo di arresto / riavvio. Per quanto posso vedere non c'è modo di accedere con rsyslognessuno dei due, e anche se ci fosse, ci sono messaggi stampati dopo che rsyslogè stato arrestato. Parte del mio processo di spegnimento / riavvio è di rimontare i rootfs in modo semplice e smontare tutto il resto, dopo che la registrazione su un file che sarà ancora lì al prossimo avvio è praticamente impossibile.

Il modo più semplice che posso vedere per visualizzare i messaggi è modificare gli script /etc/init.d/halte / o /etc/init.d/rebootper mettere in pausa appena prima dell'effettivo halt/ reboot. Per lo haltscript, eseguire il comando sudoedit /etc/init.d/halt(o utilizzare un editor GUI) e cercare la riga che esegue l'arresto effettivo. Per me questa è la linea:

halt -d -f $netdown $poweroff $hddown

Altrimenti dovrebbe essere alla fine della do_stopfunzione e l'unica linea che chiama il haltcomando. Una volta trovata la linea, basta inserire una nuova linea sopra con il seguente:

read -p "Press enter to halt" reply

Salva il file ed esci. Ora quando si spegne, il sistema si mette in pausa fino a quando non si preme Invio (o CTRL-C, CTRL-D, ecc.). Puoi leggere i messaggi stampati sullo schermo. Se è presente più di una singola schermata di testo, è possibile visualizzare lo scorrimento del terminale premendo Shift+PgUp. Se ciò non è ancora sufficiente, esistono modi per aumentare le dimensioni del buffer di scorrimento (forse una domanda diversa).

Per fare lo stesso al riavvio del sistema, è necessario modificare il /etc/init.d/rebootfile. Il comando usato qui è ovviamente rebootcontrario halte dovrebbe essere nuovamente alla fine della do_stopfunzione. Per me la linea è:

reboot -d -f -i

Ancora una volta inserisci quanto segue in una nuova riga sopra:

read -p "Press enter to reboot" reply

Si noti inoltre che questi file sono elencati come conffile per il initscriptspacchetto. Queste modifiche non saranno bloccate per impostazione predefinita quando i pacchetti vengono aggiornati, anche se causeranno un conflitto.


Una soluzione più completa sarebbe quella di utilizzare il seguente 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

Questo dovrebbe essere inserito /etc/init.d/pause_hooke può essere abilitato all'esecuzione allo spegnimento / riavvio con il seguente comando:

sudo update-rc.d pause_hook defaults

Per abilitare quindi l'hook effettivo, creare i file /etc/pause_hook.confcontenenti la riga:

PAUSE_HOOK_ENABLED=true

Il processo di spegnimento / riavvio dovrebbe ora essere messo in pausa appena prima della chiamata dello script halto reboot, dando tempo per visualizzare i messaggi. Può anche essere facilmente disabilitato / riattivato commentando / sbloccando la riga di abilitazione /etc/pause_hook.conf. In dpkgquesto modo non ci saranno conflitti di conffile durante gli aggiornamenti.


Una soluzione abbastanza carina, specialmente lo script di init.
Mikhail Morfikov,

4

La soluzione più semplice potrebbe essere quella di provare a scattare un video anziché una fotografia. È possibile passare da un fotogramma all'altro dopo.


2
Non posso credere che non ci siano file con quei messaggi registrati !!! Proverò a registrare per video.
Sigur,

7
Alcuni di questi messaggi vengono stampati dopo che i filesystem sono stati smontati! Quindi non possono finire tutti in un file.
Jim Paris,

4

Vedere il registro in tempo reale

Ho scoperto che durante l'arresto di solito c'è un logo Ubuntu e luci lampeggianti, che viene mostrato al posto di un registro del processo di spegnimento. Se ci sono errori, allora sono mostrati, ma in modo disordinato. Tuttavia, durante lo spegnimento, se premo il tasto Windows e r( Metar), riesco a vedere il successo e il fallimento dei servizi di sistema, mentre si verificano. Quindi so cosa è esattamente rotto. Non ho idea se questa scorciatoia da tastiera sia specifica per la mia configurazione di Kubuntu o cosa; Non l'ho aggiunto .. Uno di quelli che ho trovato per caso, in qualche modo ...

Visualizzazione dei registri dopo il riavvio

Al riavvio del sistema, i messaggi di errore devono essere salvati in un file di registro. Quale file di registro dipende dal servizio interrotto / configurato in modo errato. Il registro rilevante sarà quasi sicuramente in /var/log/(o in una sua sottodirectory). ls, less, grepE findsono stati gli unici programmi che ho avuto bisogno per la ricerca di messaggi di errore nei registri ...

Una volta trovato l'errore e il servizio che lo ha causato, non è necessario riavviare per testare la nuova configurazione; basta riavviare il servizio .. Speriamo che tu possa testare la configurazione fissa con un comando come:

sudo service <service name> restart


È Windows + r o Alt + r che stai premendo? I mapping predefiniti mappano la chiave di Windows su super e la meta chiave su alt, quindi non è chiaro esattamente quale chiave stai descrivendo.
Casey,

3

Dopo aver esaminato come bootlogdriesce effettivamente a eseguire la registrazione, si scopre che può essere persuaso a registrare il processo di arresto / riavvio e quello di avvio. bootlogdviene avviato all'inizio del processo di avvio. Quindi fa un po 'di magia con ttye ptsdispositivi per registrare tutto l'output sul terminale a cui è collegato. Viene quindi arrestato in seguito nel processo di avvio, presumibilmente prima che inizi a registrare l'output di un utente che lavora su tty.

Se bootlogdviene riacceso durante il processo di arresto / riavvio e arrestato prima che il file system che contiene il registro sia smontato, sarà possibile leggere la maggior parte del processo di arresto disponibile da leggere al successivo avvio.

bootlogdriesce ad essere sia avviato che arrestato durante l'avvio con due initscript. Uno è uno initscript normale che avvia / arresta il processo normalmente. L'altro è uno initscript 'invertito' in quanto quando viene chiamato con start, chiama il primo script con stop. Questo "inganna" il sysvinitprocesso, sembra che stia avviando due servizi separati quando sta davvero avviando e arrestando lo stesso servizio. Questo è necessario per assicurarsi che tutto avvenga nel giusto ordine.

Per eseguire l' bootlogdesecuzione durante l'arresto, è necessario:

  1. Installa bootlogdse non l'hai già fatto.
  2. Copia i due script init
  3. Fai in modo che il cambio di script "invertito" si fermi per iniziare invece di iniziare per fermare.
  4. Modificare le intestazioni LSB in modo che entrambi gli script vengano eseguiti al momento giusto durante l'arresto / riavvio
  5. Installali con update-rc.d.

Ecco le mie modifiche come uno bashscript copia / incolla (se vuoi apportare le modifiche manualmente, le intestazioni LSB che ho usato sono nella 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

Tutti i messaggi visualizzati prima dell'arresto bootlogdverranno archiviati /var/log/boot. bootlogdrimuove i caratteri di escape dal flusso di testo. Il seguente bashcomando ( ) visualizzerà il colore di accesso, come appare durante l'arresto:

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

Vedi questa domanda per maggiori dettagli su questo - /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

La posizione del registro può essere modificata modificando ulteriormente gli script. Purtroppo ogni aspetto del file deve essere cambiato (anche, in sostituzione /ver/log/bootnon è sufficiente in quanto lo script fa un cda /var/logad un certo punto).

Quanto sopra funzionerà anche solo se /var/logè su rootfs. In caso contrario, le dipendenze devono essere rielaborate in modo da umountfsfarlo dopo che bootlogdè stato arrestato. Oppure accedi a un file su rootfs.


1

Devi modificare tutti i file /etc/rc6.d/* e reindirizzare il loro output su alcuni file, che puoi leggere in seguito.

Questo reindirizzamento ti dirà anche quale programma failede why.

Inoltre, è necessario modificare start-stop-daemonrimuovendo il --quietparametro e aggiungendo il -vparametro in tutti quei file.

In tal caso, assicurati di ripristinare tutte le modifiche apportate. Il backup dei file esistenti prima di apportare modifiche sarà una buona idea.


OK. Questo richiederà molto lavoro da parte mia. Ci proverò. Grazie.
Sigur,

Fammi sapere il risultato allora
SHW

Modificare gli script in /etc/init.d(tutto nei /etc/rc?.dlink qui) non farà nulla. L'output non è diretto, è attraverso le funzioni in /lib/lsb/init-functionse altri file che a sua volta genera. È possibile modificarli, tuttavia alcuni aggiornamenti potrebbero bloccare le modifiche.
Graeme,

L'unica funzione o binario che è rilevante, start-stop-daemonproviene dagli OP PoV. In attesa della sua risposta
SHW,

@SHW No, guarda gli script. La maggior parte dell'output proviene da altre parti dello script. Non credo start-stop-daemonproduca alcun output, almeno non normalmente. Gli script generano l'output ok / fail in base all'output di ritorno che utilizza log_end_msg. Vedere /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme,

0

/var/log/messagesti darà i dati di cui hai bisogno. se per te non è sufficiente, modifica /etc/syslog.confper registrare tutti i dati (cercherò di abilitare la registrazione degli errori del kernel, aka * kern), ma RIPRENDI INDIETRO dopo il riavvio, o consumerà molto spazio per i registri


Non c'è /etc/syslog.conf. Ci sono solo sysctl.conf sysctl.d/ systemd/.
Sigur,

1
prova /etc/rsyslog.conf
kaboom il

0

Per il mio laptop sudo haltfarà l'arresto del software non hardware. cioè lo schermo e altro hardware rimangono in esecuzione. L'ultimo messaggio nella schermata sarà

Sistema bloccato

A questo punto premo semplicemente il pulsante di accensione e tutto spento. Puoi provare questo. Puoi anche provaresudo halt --verbose


Quindi immagino che questo sia un processo totalmente sicuro. Nessun danno all'hardware ?!
Sigur,

0

Come ha detto Graeme, con il filesystem ro o smontato, ucciso klogd non c'è modo di scrivere tali informazioni su un file. Una soluzione potrebbe utilizzare una console (porta seriale), definita in bootargs. Basta collegare il cavo null modem e un altro PC (tablet o smartphone con l'adattatore appropriato) e l'emulatore di terminale.


-1

I messaggi di errore (e altri) sono generalmente nascosti plymouthper motivi estetici.

Forse questo aiuta: se premi ESC durante l'arresto, plymouthmostra la console grafica. Questo ti mostra messaggi utili?

A parte questo, c'è poco che puoi fare se il computer si arresta in modo anomalo perché potrebbe non essere in grado di scrivere il file di registro, sia esso bufferizzato o /var/logè già rimontato in sola lettura, a seconda di quando si verifica l'arresto anomalo. È possibile dare un'occhiata a questi file eseguendo ls -ltr /var/loge verificando se esiste un file di registro che corrisponde alla data di chiusura (o più recente).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.