Bagaimana cara membaca pesan mati setelahnya?

18

Saya menggunakan Lubuntu 11.10. Setiap kali saya mematikan saya dapat membaca GAGAL dalam huruf merah, tapi saya tidak bisa membaca lebih lanjut.

Jadi, bagaimana cara membaca pesan log dan mencoba menyelesaikan masalah?

Sigur
sumber
Lihatlah jawaban ini di askubuntu. Ini dapat membantu Anda dengan masalah Anda.
terjual 9
semuanya terekam pada /var/log/syslogdan /var/log/messages, Jadi Anda perlu membacanya dan memecahkan masalah. Anda dapat menggunakan io redirectiondengan error redirectionketika Anda menggunakanshutdown command
Teluk Persia

Jawaban:

14

Tampaknya tidak ada cara untuk mencatat data ini ke file. Untuk proses boot, ada bootlogdpaket yang membuat file /var/log/boot, tetapi tidak ada untuk proses shutdown / reboot. Sejauh yang saya bisa lihat tidak ada cara untuk login dengan rsyslogbaik, dan bahkan jika ada, ada pesan yang dicetak setelah rsyslogdihentikan. Bagian dari proses shutdown / reboot saya adalah untuk me-remount rootfs readonly dan umount yang lainnya, setelah ini logging ke file yang masih ada di boot berikutnya hampir tidak mungkin.

Cara termudah yang dapat saya lihat untuk melihat pesan adalah dengan mengedit /etc/init.d/haltdan / atau /etc/init.d/rebootskrip untuk berhenti sesaat sebelum aktual halt/ reboot. Untuk haltskrip, jalankan perintah sudoedit /etc/init.d/halt(atau gunakan editor GUI) dan cari baris yang benar-benar berhenti. Bagi saya ini adalah garis:

halt -d -f $netdown $poweroff $hddown

Kalau tidak, itu harus di akhir do_stopfungsi dan satu-satunya baris yang memanggil haltperintah. Setelah Anda menemukan garis, cukup masukkan baris baru di atas dengan yang berikut:

read -p "Press enter to halt" reply

Simpan file dan keluar. Sekarang ketika Anda mematikan, sistem akan berhenti sampai Anda menekan enter (atau CTRL-C, CTRL-D, dll). Anda dapat membaca pesan yang dicetak di layar. Jika ada lebih dari satu layar penuh teks, Anda dapat melihat terminal scrollback dengan menekan Shift+PgUp. Jika ini masih belum cukup, ada cara untuk meningkatkan ukuran buffer scrollback (mungkin pertanyaan yang berbeda).

Untuk melakukan hal yang sama ketika sistem reboot, Anda harus mengedit /etc/init.d/rebootfile. Perintah yang digunakan di sini tentu saja rebootbertentangan haltdan harus lagi berada di akhir do_stopfungsi. Bagi saya, intinya adalah:

reboot -d -f -i

Sekali lagi cukup masukkan berikut ini pada baris baru di atas:

read -p "Press enter to reboot" reply

Perhatikan juga bahwa file-file ini terdaftar sebagai paket untuk initscriptspaket. Pengeditan ini tidak akan musnah secara default ketika paket ditingkatkan, meskipun mereka akan menyebabkan konflik.


Solusi yang lebih lengkap adalah dengan menggunakan skrip berikut:

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

Ini harus ditempatkan di /etc/init.d/pause_hookdan dapat diaktifkan untuk berjalan di shutdown / reboot dengan perintah berikut:

sudo update-rc.d pause_hook defaults

Untuk mengaktifkan kait yang sebenarnya, buat file yang /etc/pause_hook.confberisi baris:

PAUSE_HOOK_ENABLED=true

Proses shutdown / reboot sekarang harus berhenti sesaat sebelum skrip haltatau rebootdipanggil, memberikan waktu untuk melihat pesan. Itu juga dapat dengan mudah dinonaktifkan / diaktifkan kembali dengan mengomentari / membatalkan perintah pada baris yang diaktifkan /etc/pause_hook.conf. Juga tidak akan ada dpkgkonflik conffile selama peningkatan dengan cara ini.

Graeme
sumber
Solusi yang cukup bagus, terutama skrip init.
Mikhail Morfikov
4

Solusi termudah mungkin dengan mencoba mengambil video alih-alih foto. Anda dapat melewatinya frame-by-frame nanti.

Jim Paris
sumber
2
Saya tidak percaya bahwa tidak ada file dengan pesan-pesan itu direkam !!! Saya akan mencoba merekam dengan video.
Sigur
7
Beberapa dari pesan itu dicetak setelah sistem file dilepas! Jadi mereka tidak bisa berakhir di file.
Jim Paris
4

Melihat log secara real time

Saya telah menemukan bahwa selama shutdown biasanya ada logo Ubuntu dan lampu berkedip, yang ditampilkan sebagai ganti log dari proses shutdown. Jika ada kesalahan, maka itu terlihat, tapi berantakan. Namun, ketika dimatikan, jika saya menekan tombol Windows dan r( Metar), maka saya bisa melihat keberhasilan dan kegagalan layanan sistem, seperti yang terjadi. Jadi saya tahu persis apa yang rusak. Tidak tahu apakah pintasan keyboard ini khusus untuk pengaturan Kubuntu saya atau apa; Saya tidak menambahkannya .. Salah satu yang saya temukan secara tidak sengaja, entah bagaimana ...

Melihat log setelah reboot

Ketika sistem di-reboot, pesan kesalahan harus disimpan ke dalam file log. File log mana yang bergantung pada layanan mana yang rusak / salah konfigurasi. Log yang relevan hampir pasti berada di /var/log/(atau subdirektori daripadanya). ls, less, grepDan findsatu-satunya program saya sudah membutuhkan untuk menemukan pesan kesalahan di log ...

Setelah Anda menemukan kesalahan dan layanan yang menyebabkannya, maka Anda tidak perlu reboot untuk menguji konfigurasi baru; cukup restart layanan .. Semoga Anda dapat menguji konfigurasi tetap dengan perintah seperti:

sudo service <service name> restart

Alex Leach
sumber
Apakah Windows + r atau Alt + r yang Anda tekan? Pemetaan default memetakan kunci windows ke super dan kunci meta ke alt sehingga tidak jelas kunci mana yang Anda jelaskan.
Casey
3

Setelah melihat bagaimana bootlogdsebenarnya mengelola logging, ternyata dapat dibujuk untuk mencatat proses shutdown / reboot dan juga startup. bootlogddimulai pada awal proses boot. Kemudian melakukan beberapa keajaiban dengan ttydan ptsperangkat untuk mencatat semua output ke terminal yang terhubung dengannya. Itu kemudian dihentikan kemudian dalam proses boot, mungkin sebelum itu akan mulai mencatat output dari pengguna yang bekerja pada tty.

Jika bootlogddinyalakan kembali selama proses shutdown / reboot dan berhenti sebelum sistem file mana pun yang berisi log dilepas, akan ada catatan sebagian besar proses shutdown yang tersedia untuk dibaca pada boot berikutnya.

bootlogdberhasil dimulai dan dihentikan selama startup dengan memiliki dua initskrip. Salah satunya adalah initskrip normal yang memulai / menghentikan proses seperti biasa. Yang lain adalah initskrip 'terbalik' di mana ketika dipanggil dengan start, ia memanggil skrip pertama dengan berhenti. Ini 'menipu' sysvinitprosesnya, tampaknya memulai dua layanan terpisah ketika benar-benar memulai dan menghentikan layanan yang sama. Ini diperlukan untuk memastikan semuanya terjadi dalam urutan yang benar.

Untuk bootlogdmenjalankan selama shutdown, yang diperlukan adalah:

  1. Instal bootlogdjika Anda belum melakukannya.
  2. Salin dua skrip init
  3. Buat perubahan skrip 'terbalik' berhenti untuk memulai alih-alih mulai berhenti.
  4. Ubah header LSB sehingga kedua skrip berjalan pada waktu yang tepat selama shutdown / reboot
  5. Instal dengan update-rc.d.

Berikut ini adalah perubahan saya sebagai bashskrip salin / tempel (jika Anda ingin melakukan perubahan secara manual, header LSB yang saya gunakan ada di tambalan):

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

Semua pesan yang muncul sebelum bootlogddihentikan akan disimpan di /var/log/boot. bootlogdmenghapus karakter pelarian dari aliran teks. Perintah ( bash) berikut akan menampilkan warna log in, seperti yang muncul saat pematian:

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

Lihat pertanyaan ini untuk rincian lebih lanjut tentang ini - /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

Lokasi log dapat diubah dengan mengedit skrip lebih lanjut. Sayangnya setiap penampilan file harus diubah (juga, menggantikan /ver/log/boottidak cukup sebagai script melakukan cduntuk /var/logpada satu titik).

Di atas juga hanya akan berfungsi jika /var/logada di rootfs. Jika tidak dependensi perlu dikerjakan ulang sehingga umountfsdilakukan setelah bootlogddihentikan. Atau login ke file di rootfs.

Graeme
sumber
1

Anda perlu mengedit semua file /etc/rc6.d/* dan mengarahkan outputnya ke beberapa file, yang dapat Anda baca nanti.

Pengalihan ini, juga akan memberi tahu Anda, program mana faileddan why.

Selain itu, Anda harus memodifikasi start-stop-daemondengan menghapus --quietparameter dan menambahkan -vparameter di semua file tersebut.

Jika Anda melakukannya, maka pastikan, Anda akan mengembalikan semua perubahan yang Anda lakukan. Mencadangkan file yang ada sebelum melakukan perubahan adalah ide yang bagus.

SHW
sumber
BAIK. Ini akan membutuhkan banyak pekerjaan dari saya. Saya akan mencoba. Terima kasih.
Sigur
Biarkan saya tahu hasilnya
SHW
Mengedit sripts /etc/init.d(semua yang ada di /etc/rc?.dtautan ke sini) tidak akan melakukan apa-apa Outputnya tidak langsung, itu melalui fungsi dalam /lib/lsb/init-functionsdan file lain yang pada gilirannya sumber. Anda dapat mengedit ini, beberapa peningkatan akan merusak perubahan.
Graeme
Satu-satunya fungsi atau biner yang relevan, berasal start-stop-daemondari OPs PoV. Sekarang Menunggu jawabannya
SHW
@ SHW Tidak, lihat skrip. Sebagian besar output berasal dari bagian lain dari skrip. Saya tidak berpikir start-stop-daemonmenghasilkan output apa pun, setidaknya tidak secara normal. Script menghasilkan output ok / gagal berdasarkan output kembali menggunakan log_end_msg. Lihat /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme
0

/var/log/messagesakan memberi Anda data yang Anda butuhkan. jika itu tidak cukup untuk Anda, modifikasi /etc/syslog.confuntuk mencatat semua data (saya akan mencari untuk mengaktifkan kesalahan kernel logging, alias * kern) tetapi REVERT IT BACK setelah Anda reboot, atau itu akan memakan banyak ruang untuk log

kaboom
sumber
Tidak ada /etc/syslog.conf. Hanya ada sysctl.conf sysctl.d/ systemd/.
Sigur
1
mencoba /etc/rsyslog.conf
kaboom
0

Untuk laptop saya sudo haltakan melakukan shutdown perangkat lunak bukan perangkat keras. yaitu layar dan perangkat keras lainnya tetap berjalan. Pesan terakhir di layar adalah

Sistem dihentikan

Pada titik ini saya cukup tekan tombol Power dan semuanya mati. Anda bisa mencoba ini. Anda juga dapat mencobasudo halt --verbose

totti
sumber
Jadi saya kira ini adalah proses yang benar-benar aman. Tidak ada kerusakan pada perangkat keras ?!
Sigur
0

Seperti yang Graeme katakan, dengan ro atau filesystem yang diturunkan, membunuh klogd tidak ada cara untuk menulis info seperti itu ke file. Sebuah solusi mungkin menggunakan konsol (port serial), yang didefinisikan dalam bootargs. Cukup sambungkan kabel modem nol dan PC lain (tablet atau smartphone dengan adaptor yang sesuai) dan emulator terminal.

fich
sumber
-1

Pesan kesalahan (dan lainnya) biasanya disembunyikan oleh plymouthkarena alasan estetika.

Mungkin ini membantu: Jika Anda menekan ESC selama shutdown, plymouthtunjukkan konsol grafis. Apakah itu menunjukkan Anda pesan yang bermanfaat?

Terlepas dari itu, ada sedikit yang dapat Anda lakukan jika mesin benar-benar macet karena mungkin tidak dapat menulis file log - apakah itu buffer, atau /var/logsudah dibuat ulang hanya-baca, tergantung pada saat crash terjadi. Anda bisa melihat file-file ini dengan mengeksekusi ls -ltr /var/logdan melihat apakah ada file log yang cocok dengan tanggal penutupan Anda (atau yang lebih baru).

Robert Dinse
sumber