Jak później przeczytać komunikaty o wyłączeniu?

18

Używam Lubuntu 11.10. Za każdym razem, gdy się zamykam, mogę czytać FAIL czerwonymi literami, ale nie mogę więcej czytać.

Jak odczytać komunikaty dziennika i spróbować rozwiązać problem?

Sigur
źródło
Spójrz na tę odpowiedź na askubuntu. Może ci pomóc z twoim problemem.
solde9
wszystko zapisane w /var/log/syslogi /var/log/messages, więc musisz je przeczytać i rozwiązać problem. Możesz używać io redirectionz, error redirectiongdy używaszshutdown command
PersianGulf

Odpowiedzi:

14

Wydaje się, że nie ma sposobu, aby zalogować te dane do pliku. W przypadku procesu rozruchu istnieje bootlogdpakiet, który tworzy plik /var/log/boot, ale nic w procesie zamykania / ponownego uruchamiania. Z tego co widzę, nie ma sposobu, aby się zalogować rsyslog, a nawet jeśli tak, to wiadomości są drukowane po rsyslogzatrzymaniu. Częścią mojego procesu zamykania / ponownego uruchamiania jest ponowne zamontowanie rootfów tylko do odczytu i odmontowanie wszystkiego innego, po tym logowaniu do pliku, który nadal będzie istniał przy następnym uruchomieniu, jest praktycznie niemożliwe.

Najprostszym sposobem, w jaki widzę wiadomości, jest edytowanie /etc/init.d/halti / lub /etc/init.d/rebootskryptów w celu wstrzymania tuż przed rzeczywistym halt/ reboot. W przypadku haltskryptu uruchom polecenie sudoedit /etc/init.d/halt(lub użyj edytora GUI) i poszukaj wiersza, który faktycznie się zatrzymuje. Dla mnie jest to linia:

halt -d -f $netdown $poweroff $hddown

W przeciwnym razie powinien znajdować się na końcu do_stopfunkcji i jedynym wierszu wywołującym haltpolecenie. Po znalezieniu linii wystarczy wstawić nową linię powyżej, wykonując następujące czynności:

read -p "Press enter to halt" reply

Zapisz plik i wyjdź. Teraz po wyłączeniu system wstrzyma się do momentu naciśnięcia klawisza Enter (lub CTRL-C, CTRL-D itp.). Możesz odczytać wiadomości wydrukowane na ekranie. Jeśli jest więcej niż jeden ekran tekstu, możesz przewijać terminal, naciskając Shift+PgUp. Jeśli to nadal nie wystarczy, istnieją sposoby na zwiększenie rozmiaru bufora przewijania (być może inne pytanie).

Aby zrobić to samo po ponownym uruchomieniu systemu, musisz edytować /etc/init.d/rebootplik. Polecenie użyte tutaj jest oczywiście rebootw przeciwieństwie do halti powinno znów znajdować się na końcu do_stopfunkcji. Dla mnie linia jest następująca:

reboot -d -f -i

Ponownie po prostu wstaw poniższe w nowym wierszu powyżej:

read -p "Press enter to reboot" reply

Zauważ też, że pliki te są wymienione jako pliki conffiles dla initscriptspakietu. Edycje te nie będą domyślnie blokowane podczas aktualizacji pakietów, chociaż powodują konflikt.


Bardziej kompletnym rozwiązaniem byłoby użycie następującego skryptu:

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

To powinno być umieszczone /etc/init.d/pause_hooki może być włączone do uruchamiania przy zamykaniu / ponownym uruchomieniu za pomocą następującego polecenia:

sudo update-rc.d pause_hook defaults

Aby następnie włączyć faktyczny zaczep, utwórz pliki /etc/pause_hook.confzawierające linię:

PAUSE_HOOK_ENABLED=true

Proces zamykania / ponownego uruchamiania powinien teraz zostać wstrzymany tuż przed wywołaniem skryptu haltlub reboot, dając czas na przejrzenie wiadomości. Można go również łatwo wyłączyć / ponownie włączyć, komentując / usuwając komentarz z linii zezwolenia /etc/pause_hook.conf. W ten sposób nie wystąpią również dpkgkonflikty konfliktów podczas aktualizacji.

Graeme
źródło
Całkiem niezłe rozwiązanie, zwłaszcza skrypt init.
Michaił Morfikow
4

Najłatwiejszym rozwiązaniem może być zrobienie filmu zamiast zdjęcia. Możesz przechodzić przez nią klatka po klatce później.

Jim Paris
źródło
2
Nie mogę uwierzyć, że nie ma pliku z nagranymi wiadomościami !!! Spróbuję nagrać wideo.
Sigur
7
Niektóre z tych komunikatów są drukowane po odmontowaniu systemów plików! Więc nie mogą wszystkie skończyć w pliku.
Jim Paris
4

Wyświetlanie dziennika w czasie rzeczywistym

Przekonałem się, że podczas zamykania zwykle pojawia się logo Ubuntu i migające światła, które są wyświetlane zamiast dziennika procesu zamykania. Jeśli są błędy, są one wyświetlane, ale niechlujnie. Jednak podczas zamykania, jeśli nacisnę klawisz Windows i r(Metar ), to widzę sukcesy i niepowodzenia usług systemowych, gdy się pojawiają. Więc wiem, co dokładnie jest zepsute. Nie mam pojęcia, czy ten skrót klawiaturowy jest specyficzny dla mojej konfiguracji Kubuntu, czy co; Nie dodałem tego ... Jeden z tych, które znalazłem przez przypadek, jakoś ...

Przeglądanie dzienników po ponownym uruchomieniu

Po ponownym uruchomieniu systemu komunikaty o błędach należy zapisać w pliku dziennika. Który plik dziennika zależy od tego, która usługa jest uszkodzona / źle skonfigurowana. Odpowiedni dziennik prawie na pewno będzie w /var/log/(lub jego podkatalogu). ls, less, grepI findbyły jedynymi programy mam potrzebne do znalezienia komunikatów o błędach w dzienniku ...

Po znalezieniu błędu i usługi, która go spowodowała, nie trzeba ponownie uruchamiać się, aby przetestować nową konfigurację; po prostu uruchom ponownie usługę. Mam nadzieję, że możesz przetestować stałą konfigurację za pomocą polecenia:

sudo service <service name> restart

Alex Leach
źródło
Czy naciskasz Windows + r czy Alt + r? Domyślne odwzorowania odwzorowują klucz systemu Windows na super, a klawisz meta na alt, więc nie jest jasne, który klucz opisujesz.
Casey
3

Po sprawdzeniu, jak bootlogdfaktycznie udaje się wykonać rejestrowanie, okazuje się, że można go przekonać do zalogowania procesu zamykania / ponownego uruchamiania, a także uruchamiania. bootlogdjest uruchamiany na początku procesu rozruchu. Następnie robi magię z urządzeniami ttyi ptsrejestruje wszystkie dane wyjściowe na terminalu, do którego jest podłączony. Następnie jest zatrzymywany na późniejszym etapie procesu rozruchu, prawdopodobnie zanim zacznie rejestrować dane wyjściowe od użytkownika pracującego na tty.

Jeśli bootlogdzostanie ponownie uruchomiony podczas procesu zamykania / ponownego uruchamiania i zatrzymany przed odmontowaniem dowolnego systemu plików zawierającego dziennik, zostanie zapisana większość procesu zamykania dostępna do odczytu przy następnym uruchomieniu.

bootlogdudaje się zarówno uruchomić, jak i zatrzymać podczas uruchamiania dzięki dwóm initskryptom. Jednym z nich jest normalny initskrypt, który uruchamia / zatrzymuje proces w normalny sposób. Drugi jest initskryptem „odwróconym” , ponieważ wywołany za pomocą startwywołuje pierwszy skrypt ze stopem. To „oszukuje” sysvinitproces, wydaje się, że uruchamia dwie oddzielne usługi, kiedy naprawdę uruchamia i zatrzymuje tę samą usługę. Jest to konieczne, aby upewnić się, że wszystko dzieje się we właściwej kolejności.

Aby bootlogduruchomić podczas zamykania, wymagane jest:

  1. Zainstaluj, bootlogdjeśli jeszcze tego nie zrobiłeś.
  2. Skopiuj dwa skrypty inicjujące
  3. Spraw, aby zmiana skryptu „odwróconego” zatrzymała się, aby rozpocząć zamiast zacząć, aby zatrzymać.
  4. Zmień nagłówki LSB, aby oba skrypty działały we właściwym czasie podczas zamykania / ponownego uruchamiania
  5. Zainstaluj je za pomocą update-rc.d.

Oto moje zmiany jako bashskrypt kopiuj / wklej (jeśli chcesz wprowadzić zmiany ręcznie, nagłówki LSB, których użyłem, znajdują się w łatce):

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

Wszystkie komunikaty, które pojawią się wcześniej, bootlogdzostaną zatrzymane w /var/log/boot. bootlogdusuwa znaki specjalne ze strumienia tekstowego. Następujące bashpolecenie ( ) wyświetli dziennik w kolorze, tak jak pojawia się podczas zamykania:

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

Zobacz to pytanie, aby uzyskać więcej informacji na ten temat - /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

Położenie dziennika można zmienić poprzez dalszą edycję skryptów. Niestety każdy wygląd pliku musi być zmieniony (również zastępując /ver/log/bootjest nie tyle jako skrypt robi cdsię /var/logw jednym punkcie).

Powyższe działa również tylko wtedy, gdy /var/logznajduje się na rootfach. Jeśli nie, zależności należy przerobić, aby umountfszrobić to po bootlogdzatrzymaniu. Albo zaloguj się do pliku na rootfs.

Graeme
źródło
1

Musisz edytować wszystkie pliki /etc/rc6.d/* i przekierować ich dane wyjściowe do jakiegoś pliku, który możesz przeczytać później.

Przekierowanie powie Ci również, który program failedi why.

Dodatkowo musisz zmodyfikować start-stop-daemon, usuwając --quietparametr i dodając -vparametr do wszystkich tych plików.

Jeśli to robisz, upewnij się, że cofniesz wszystkie wprowadzone zmiany. Wykonanie kopii zapasowej istniejących plików przed dokonaniem zmian będzie dobrym pomysłem.

SHW
źródło
DOBRZE. To zajmie mi dużo pracy. Spróbuję. Dzięki.
Sigur
Daj mi znać wynik
SHW
Edycja skryptu w /etc/init.d(wszystko w /etc/rc?.dlinkach tutaj) nic nie da. Dane wyjściowe nie są bezpośrednie, to poprzez funkcje w /lib/lsb/init-functionsi inne pliki, które z kolei źródła. Możesz je edytować, jednak niektóre aktualizacje blokują zmiany.
Graeme,
Jedyna istotna funkcja lub plik binarny pochodzi start-stop-daemonz PO PoV. Teraz czeka na odpowiedź
SHW
@ SHW Nie, spójrz na skrypty. Większość danych wyjściowych pochodzi z innych części skryptu. Nie wydaje mi się, aby start-stop-daemonprodukował jakikolwiek efekt, przynajmniej normalnie. Skrypty generują dane wyjściowe OK / Fail na podstawie ich zwracanych danych wyjściowych za pomocą log_end_msg. Zobaczyć /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme
0

/var/log/messagesdostarczy ci potrzebne dane. jeśli nie jest to dla ciebie wystarczające, zmodyfikuj, /etc/syslog.confaby rejestrować wszystkie dane (chciałbym włączyć rejestrowanie błędów jądra, inaczej * kern), ale ODWRÓĆ TO POWRÓT po ponownym uruchomieniu, lub zje dużo miejsca na dzienniki

kaboom
źródło
Nie ma /etc/syslog.conf. Są tylko sysctl.conf sysctl.d/ systemd/.
Sigur
1
try /etc/rsyslog.conf
kaboom
0

Dla mojego laptopa sudo haltnastąpi wyłączenie oprogramowania, a nie sprzęt. tzn. ekran i inny sprzęt pozostają włączone. Ostatnia wiadomość na ekranie to

System zatrzymany

W tym momencie po prostu naciskam przycisk zasilania i wszystko się wyłącza. Możesz tego spróbować. Możesz także spróbowaćsudo halt --verbose

Totti
źródło
Sądzę więc, że jest to proces całkowicie bezpieczny. Brak uszkodzeń sprzętu ?!
Sigur
0

Jak powiedział Graeme, z ro lub zdemontowanym systemem plików zabił klogda, nie ma sposobu na zapisanie takich informacji w pliku. Rozwiązaniem może być użycie konsoli (portu szeregowego) zdefiniowanej w bootargs. Wystarczy podłączyć kabel modemu zerowego i inny komputer (tablet lub smartfon z odpowiednim adapterem) i emulator terminala.

fich
źródło
-1

Komunikaty o błędach (i inne) są zwykle ukryte ze plymouthwzględów estetycznych.

Być może to pomaga: jeśli naciśniesz ESC podczas zamykania, plymouthpokazuje konsolę graficzną. Czy to pokazuje przydatne wiadomości?

Poza tym niewiele można zrobić, jeśli komputer faktycznie ulega awarii, ponieważ może nie być w stanie zapisać pliku dziennika - niezależnie od tego, czy jest on buforowany, czy /var/logjest już zamontowany tylko do odczytu, w zależności od tego, kiedy nastąpi awaria. Możesz rzucić okiem na te pliki, wykonując ls -ltr /var/logi sprawdzając, czy istnieje plik dziennika zgodny z datą zamknięcia (lub nowszą).

Robert Dinse
źródło