Wie kann ich die Meldungen zum Herunterfahren nachträglich lesen?


18

Ich benutze Lubuntu 11.10. Jedes Mal, wenn ich heruntergefahren bin, kann ich FAIL in roten Buchstaben lesen, aber ich kann nicht mehr lesen.

Also, wie lese ich die Logmeldungen und versuche das Problem zu lösen?


Schau dir diese Antwort auf askubuntu an. Es kann Ihnen bei Ihrem Problem helfen.
Solde9

alles recored an /var/log/syslogund /var/log/messages, damit Sie sie und throubleshoot lesen müssen. Sie können io redirectionmit verwenden, error redirectionwenn Sie verwendenshutdown command
PersianGulf

Antworten:


14

Es scheint keine Möglichkeit zu geben, diese Daten in einer Datei zu protokollieren. Für den Boot-Vorgang gibt es das bootlogdPaket, das die Datei erstellt /var/log/boot, aber nichts für den Shutdown- / Neustart-Vorgang. Soweit ich sehen kann, gibt es auch keine Möglichkeit, sich anzumelden rsyslog, und selbst wenn vorhanden, werden Meldungen gedruckt, nachdem sie rsysloggestoppt wurden. Ein Teil meines Herunterfahrens / Neustarts besteht darin, die rootfs wieder einzubinden und alles andere wieder einzubinden, nachdem diese Protokollierung in eine Datei, die beim nächsten Start noch vorhanden ist, praktisch unmöglich ist.

Die einfachste Möglichkeit, die Nachrichten anzuzeigen, besteht darin, die Skripte zu bearbeiten /etc/init.d/haltund / oder /etc/init.d/rebootvor dem eigentlichen halt/ anzuhalten reboot. haltFühren Sie für das Skript den Befehl aus sudoedit /etc/init.d/halt(oder verwenden Sie einen GUI-Editor) und suchen Sie nach der Zeile, die den eigentlichen Halt ausführt. Für mich ist das die Linie:

halt -d -f $netdown $poweroff $hddown

Andernfalls sollte es am Ende der do_stopFunktion stehen und die einzige Zeile sein, die den haltBefehl aufruft . Sobald Sie die Zeile gefunden haben, fügen Sie einfach eine neue Zeile ein:

read -p "Press enter to halt" reply

Speichern Sie die Datei und beenden Sie sie. Wenn Sie jetzt herunterfahren, wird das System angehalten, bis Sie die Eingabetaste (oder STRG-C, STRG-D usw.) drücken. Sie können die auf dem Bildschirm gedruckten Nachrichten lesen. Wenn mehr als ein Bildschirm mit Text vorhanden ist, können Sie das Zurückblättern des Terminals durch Drücken von anzeigen Shift+PgUp. Wenn dies immer noch nicht ausreicht, gibt es Möglichkeiten, den Scrollback-Puffer zu vergrößern (möglicherweise jedoch eine andere Frage).

Um dasselbe beim Neustart des Systems zu tun, müssen Sie die /etc/init.d/rebootDatei bearbeiten . Der hier verwendete Befehl steht natürlich rebootim Gegensatz zu haltund sollte wieder am Ende der do_stopFunktion stehen. Für mich ist die Linie:

reboot -d -f -i

Fügen Sie einfach folgendes in eine neue Zeile ein:

read -p "Press enter to reboot" reply

Beachten Sie auch, dass diese Dateien als Conffiles für das initscriptsPaket aufgelistet sind . Diese Änderungen werden nicht standardmäßig blockiert, wenn die Pakete aktualisiert werden, obwohl sie einen Konflikt verursachen.


Eine vollständigere Lösung wäre die Verwendung des folgenden Skripts:

#! /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

Dies sollte in platziert werden /etc/init.d/pause_hookund kann aktiviert werden, um beim Herunterfahren / Neustarten mit dem folgenden Befehl ausgeführt zu werden:

sudo update-rc.d pause_hook defaults

Erstellen Sie die Dateien, /etc/pause_hook.confdie die Zeile enthalten , um dann den tatsächlichen Hook zu aktivieren :

PAUSE_HOOK_ENABLED=true

Der Vorgang zum Herunterfahren / Neustarten sollte jetzt kurz vor dem haltAufrufen des rebootSkripts oder angehalten werden, damit Zeit zum Anzeigen der Nachrichten bleibt. Es kann auch einfach deaktiviert / wieder aktiviert werden, indem die Aktivierungszeile in kommentiert / nicht kommentiert wird /etc/pause_hook.conf. Auf dpkgdiese Weise treten bei Upgrades auch keine Conffile-Konflikte auf.


Eine ziemlich nette Lösung, besonders das Init-Skript.
Mikhail Morfikov

4

Die einfachste Lösung könnte darin bestehen, ein Video anstelle eines Fotos aufzunehmen. Sie können es später Bild für Bild durchgehen.


2
Ich kann nicht glauben, dass es keine Datei mit diesen Nachrichten gibt !!! Ich werde versuchen, per Video aufzunehmen.
Sigur

7
Einige dieser Nachrichten werden gedruckt, nachdem die Bereitstellung der Dateisysteme aufgehoben wurde! Sie können also nicht alle in einer Datei landen.
Jim Paris

4

Sehen Sie das Protokoll in Echtzeit

Ich habe festgestellt, dass es beim Herunterfahren normalerweise ein Ubuntu-Logo und blinkende Lichter gibt, die anstelle eines Protokolls des Herunterfahrvorgangs angezeigt werden. Wenn es Fehler gibt, werden sie irgendwie angezeigt, aber chaotisch. Wenn ich jedoch beim Herunterfahren die Windows-Taste und r( Metar) drücke , kann ich den Erfolg und Misserfolg der Systemdienste sehen, sobald sie auftreten. Also dann weiß ich was genau kaputt ist. Keine Ahnung, ob diese Tastenkombination für mein Kubuntu-Setup spezifisch ist oder was; Ich habe es nicht hinzugefügt. Einer von denen, die ich zufällig gefunden habe, irgendwie ...

Anzeigen der Protokolle nach dem Neustart

Beim Neustart des Systems sollten die Fehlermeldungen in einer Protokolldatei gespeichert werden. Welche Protokolldatei von welchem ​​Dienst abhängt, ist defekt / falsch konfiguriert. Das relevante Protokoll befindet sich mit ziemlicher Sicherheit in /var/log/(oder einem Unterverzeichnis davon). ls, less, grepUnd findhaben die einzigen Programme , die ich für die Suche nach Fehlermeldungen in den Protokollen benötigt haben ...

Wenn Sie den Fehler und den Dienst gefunden haben, der ihn verursacht hat, müssen Sie den Computer nicht neu starten, um die neue Konfiguration zu testen. Starten Sie einfach den Dienst neu. Hoffentlich können Sie die feste Konfiguration mit einem Befehl wie dem folgenden testen:

sudo service <service name> restart


Drücken Sie Windows + r oder Alt + r? Standardzuordnungen ordnen die Windows-Taste "Super" und die Meta-Taste "Alt" zu, sodass nicht klar ist, welche Taste Sie genau beschreiben.
Casey

3

Nachdem bootlogdwir uns angesehen haben, wie die Protokollierung tatsächlich durchgeführt wird, hat sich herausgestellt, dass es überredet werden kann, sowohl den Herunterfahren- / Neustartprozess als auch den Startprozess zu protokollieren. bootlogdwird früh im Bootprozess gestartet. Anschließend werden einige Aktionen mit ttyund ptsGeräten ausgeführt, um alle Ausgaben auf dem Terminal zu protokollieren, mit dem sie verbunden sind. Es wird dann später während des Startvorgangs angehalten, vermutlich bevor die Ausgabe eines Benutzers protokolliert wird, der an dem Programm arbeitet tty.

Wird bootlogdder Computer während des Herunterfahrens / Neustarts erneut gestartet und angehalten, bevor das Dateisystem, das das Protokoll enthält, ausgehängt wird, wird der größte Teil des Herunterfahrens aufgezeichnet und kann beim nächsten Start gelesen werden.

bootlogdschafft es, während des Startvorgangs mit zwei initSkripten gestartet und gestoppt zu werden . Eines ist ein normales initSkript, das den Prozess wie gewohnt startet / stoppt. Das andere ist ein 'umgekehrtes' initSkript, das beim Aufruf mit startdas erste Skript mit stop aufruft. Dies "trickst" den sysvinitProzess aus. Es scheint, dass zwei separate Dienste gestartet werden, wenn derselbe Dienst tatsächlich gestartet und gestoppt wird. Dies ist erforderlich, um sicherzustellen, dass alles in der richtigen Reihenfolge abläuft.

Um bootlogdwährend des Herunterfahrens ausgeführt zu werden, ist Folgendes erforderlich:

  1. Installieren bootlogdSie, falls noch nicht geschehen.
  2. Kopieren Sie die beiden Init-Skripte
  3. Beenden Sie die Skriptänderung "umgekehrt", um zu starten, anstatt zu starten, um anzuhalten.
  4. Ändern Sie die LSB-Header so, dass beide Skripts beim Herunterfahren / Neustarten zum richtigen Zeitpunkt ausgeführt werden
  5. Installiere sie mit update-rc.d.

Hier sind meine Änderungen als Copy / Paste- bashSkript (wenn Sie die Änderungen manuell vornehmen möchten, befinden sich die von mir verwendeten LSB-Header im 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

Alle Nachrichten, die zuvor bootlogdangezeigt wurden, werden in gespeichert /var/log/boot. bootlogdEntfernt die Escape-Zeichen aus dem Textstrom. Mit dem folgenden bashBefehl ( ) wird das Protokoll in der Farbe angezeigt, die beim Herunterfahren angezeigt wird:

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

Weitere Informationen hierzu finden Sie in dieser Frage - /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

Der Speicherort des Protokolls kann durch weitere Bearbeitung der Skripte geändert werden. Leider muss jedes Erscheinungsbild der Datei geändert werden (auch das Ersetzen /ver/log/bootreicht nicht aus, da das Skript an einer Stelle ein cdto /var/logausführt).

Das obige funktioniert auch nur, wenn /var/loges sich auf den rootfs befindet. Wenn nicht, müssen die Abhängigkeiten überarbeitet werden, umountfsdamit dies nach dem bootlogdStoppen erfolgt. Oder loggen Sie sich in eine Datei auf dem rootfs.


1

Sie müssen alle /etc/rc6.d/* -Dateien bearbeiten und ihre Ausgabe in eine Datei umleiten, die Sie später lesen können.

Diese Weiterleitung sagt Ihnen auch, welches Programm failedund why.

Darüber hinaus müssen Sie den Parameter ändern, start-stop-daemonindem Sie ihn entfernen --quietund -vin all diesen Dateien Parameter hinzufügen .

Wenn Sie dies tun, stellen Sie sicher, dass Sie alle vorgenommenen Änderungen rückgängig machen. Sichern Sie die vorhandenen Dateien, bevor Sie Änderungen vornehmen.


IN ORDNUNG. Das wird mir viel Arbeit abnehmen. Ich werde es versuchen. Vielen Dank.
Sigur

Lassen Sie mich das Ergebnis dann wissen
SHW

Das Bearbeiten von Skripten in /etc/init.d(alles in /etc/rc?.dLinks zu hier) führt zu nichts. Die Ausgabe erfolgt nicht direkt, sondern über die Funktionen in /lib/lsb/init-functionsund andere Dateien, die sie wiederum generiert. Sie könnten diese bearbeiten, einige Upgrades würden die Änderungen jedoch zunichte machen.
Graeme

Die einzige relevante Funktion oder Binärdatei stammt start-stop-daemonvon OPs PoV. Warten auf seine Antwort
SHW

@ SHW Nö, sieh dir die Skripte an. Der größte Teil der Ausgabe stammt aus anderen Teilen des Skripts. Ich denke nicht, dass es start-stop-daemonirgendwelche Ausgaben gibt, zumindest nicht normal. Die Skripte generieren eine OK / Fail-Ausgabe basierend auf der Rückgabe mit log_end_msg. Sehen /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme

0

/var/log/messagesgibt Ihnen die Daten, die Sie benötigen. Wenn es für Sie nicht ausreicht, ändern Sie die Einstellungen /etc/syslog.conf, um alle Daten zu protokollieren (ich würde versuchen , die Protokollierung von Kernelfehlern (auch bekannt als * kern) zu aktivieren ), kehren Sie jedoch nach dem Neustart zurück, da sonst viel Platz für die Protokolle verbraucht wird


Es gibt keine /etc/syslog.conf. Es gibt nur sysctl.conf sysctl.d/ systemd/.
Sigur

1
versuchen Sie /etc/rsyslog.conf
kaboom

0

Für meinen Laptop reicht sudo haltdas Herunterfahren der Software nicht für Hardware. dh der Bildschirm und andere Hardware laufen weiter. Die letzte Meldung auf dem Bildschirm lautet

System wurde angehalten

An diesem Punkt drücke ich einfach den Ein- / Ausschalter und alles aus. Sie können dies versuchen. Sie können es auch versuchensudo halt --verbose


Ich denke also, dass dies ein absolut sicherer Prozess ist. Keine Beschädigung der Hardware ?!
Sigur

0

Wie Graeme sagte, gibt es mit ro oder dismounted filesystem, kill klogd keine Möglichkeit, solche Informationen in eine Datei zu schreiben. Eine Lösung kann die Verwendung einer Konsole (serielle Schnittstelle) sein, die in Bootargs definiert ist. Schließen Sie einfach ein Nullmodemkabel an einen anderen PC (Tablet oder Smartphone mit entsprechendem Adapter) und einen Terminalemulator an.


-1

Fehlermeldungen (und andere) werden normalerweise plymouthaus ästhetischen Gründen ausgeblendet .

Vielleicht hilft das: Wenn Sie beim Herunterfahren die ESC-Taste drücken, plymouthwird die grafische Konsole angezeigt. Zeigt Ihnen das nützliche Nachrichten?

Abgesehen davon können Sie nur wenig tun, wenn der Computer tatsächlich abstürzt, da die Protokolldatei möglicherweise nicht geschrieben werden kann. /var/logDies hängt davon ab, wann der Absturz eintritt. Sie können sich diese Dateien ansehen, indem Sie ausführen ls -ltr /var/logund prüfen, ob es eine Protokolldatei gibt, die Ihrem Datum für das Herunterfahren entspricht (oder eine neuere).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.