Bagaimana cara mengetahui dari log apa yang menyebabkan shutdown sistem?

104

Misalnya saya melihat ini di /var/log/messages:

Mar 01 23:12:34 hostname shutdown: shutting down for system halt

Apakah ada cara untuk mengetahui apa yang menyebabkan shutdown? Misalnya apakah dijalankan dari konsol, atau seseorang menekan tombol power, dll?

alex
sumber
2
Jadi kali ini a beruntung dengan /var/log/acpid: ternyata tombol power dipukul. Ada ide lain, di mana mencarinya jika acpid tidak memberikan petunjuk?
alex

Jawaban:

45

Hanya root program istimewa yang dapat mematikan sistem dengan anggun. Jadi ketika sebuah sistem dimatikan dengan cara normal, itu adalah pengguna dengan hak akses root atau skrip acpi. Dalam kedua kasus, Anda dapat mengetahuinya dengan memeriksa log. Sebuah shutdown acpi dapat disebabkan oleh tombol power tekan, terlalu panas atau baterai rendah (laptop). Saya lupa alasan ketiga, perangkat lunak UPS ketika catu daya gagal, yang akan mengirim peringatan.

Baru-baru ini saya memiliki sistem yang mulai berulang kali mati tanpa daya, ternyata itu terlalu panas dan mobo dikonfigurasi untuk hanya mematikan awal. Sistem tidak memiliki kesempatan untuk menyimpan log, tetapi untungnya memantau suhu sistem menunjukkan sistem mulai meningkat sesaat sebelum dimatikan.

Jadi, jika ini adalah shutdown normal, itu akan dicatat, jika itu intrusi ... semoga berhasil, dan jika ini adalah shutdown dingin, kesempatan terbaik Anda untuk mengetahuinya adalah mengontrol dan memantau lingkungannya.

forcefsck
sumber
118

Coba perintah berikut:

Tampilkan daftar entri reboot terakhir: last reboot | less

Tampilkan daftar entri shutdown terakhir: last -x | less

atau lebih tepatnya: last -x | grep shutdown | less

Anda tidak akan tahu siapa yang melakukannya. Jika Anda ingin tahu siapa yang melakukannya, Anda perlu menambahkan sedikit kode yang berarti Anda akan tahu lain kali.

Saya menemukan sumber ini daring. Mungkin bermanfaat bagi Anda:

Bagaimana mencari tahu siapa atau apa yang menghentikan sistem saya

Nicolas de Fontenay
sumber
25
Yah, ini tidak memberi tahu saya apa yang menyebabkan penutupan, hanya ketika itu dilakukan. Yang sudah saya tahu, lihat pertanyaan saya.
alex
1
lebih tepatnyalast -x shutdown
Rahul Patil
5
Diturunkan, karena tidak menjawab pertanyaan.
toogley
1
Tautan ini khusus untuk "Bagaimana cara mencari tahu siapa atau apa yang menghentikan sistem saya (Old Sco Unix)? "
Wolfgang
16

Ada beberapa hal yang perlu diperiksa:

Periksa output dari perintah -x terakhir

Jalankan perintah ini * dan bandingkan hasilnya dengan contoh di bawah ini:

last -x | head | tac

Contoh shutdown normal

Shutdown dan power-up yang normal terlihat seperti ini (perhatikan bahwa Anda memiliki acara shutdown dan kemudian peristiwa boot sistem):

runlevel (to lvl 0)   2.6.32- Sat Mar 17 08:48 - 08:51  (00:02) 
shutdown system down  ... <-- first the system shuts down   
reboot   system boot  ... <-- afterwards the system boots
runlevel (to lvl 3)       

Dalam beberapa kasus, Anda mungkin melihat ini (perhatikan bahwa tidak ada baris tentang shutdown tetapi sistem pada runlevel 0 yang merupakan "keadaan berhenti"):

runlevel (to lvl 0)   ... <-- first the system shuts down (init level 0)
reboot   system boot  ... <-- afterwards the system boots
runlevel (to lvl 2)   2.6.24-... Fri Aug 10 15:58 - 15:32 (2+23:34)   

Contoh shutdown yang tidak terduga

Shutdown yang tak terduga dari kehilangan daya terlihat seperti ini (perhatikan bahwa Anda memiliki acara boot sistem tanpa kejadian shutdown sistem sebelumnya):

runlevel (to lvl 3)   ... <-- the system was running since this momemnt
reboot   system boot  ... <-- then we've a boot WITHOUT a prior shutdown
runlevel (to lvl 3)   3.10.0-693.21.1. Sun Jun 17 15:40 - 09:51  (18:11)    

Periksa log di / var / log

Perintah bash untuk memfilter pesan log paling menarik adalah ini:

grep -iv ': starting\|kernel: .*: Power Button\|watching system buttons\|Stopped Cleaning Up\|Started Crash recovery kernel' \
  /var/log/messages /var/log/syslog /var/log/apcupsd* \
  | grep -iw 'recover[a-z]*\|power[a-z]*\|shut[a-z ]*down\|rsyslogd\|ups'

Ketika matikan yang tidak terduga atau kegagalan perangkat keras terjadi, sistem file tidak akan di-unmount dengan benar sehingga pada boot berikutnya Anda mungkin mendapatkan log seperti ini:

EXT4-fs ... INFO: recovery required ... 
Starting XFS recovery filesystem ...
systemd-fsck: ... recovering journal
systemd-journald: File /var/log/journal/.../system.journal corrupted or uncleanly shut down, renaming and replacing.

Ketika sistem mati karena pengguna menekan tombol daya Anda mendapatkan log seperti ini:

systemd-logind: Power key pressed.
systemd-logind: Powering Off...
systemd-logind: System is powering down.

Hanya ketika sistem dimatikan tertib Anda mendapatkan log seperti ini:

rsyslogd: ... exiting on signal 15

Ketika sistem dimatikan karena terlalu panas Anda mendapatkan log seperti ini:

critical temperature reached...,shutting down

Jika Anda memiliki UPS dan menjalankan daemon untuk memantau daya dan shutdown, Anda harus memeriksa lognya (NUT log on / var / log / messages tetapi log apcupsd di / var / log / apcupsd *)


Catatan

*: Berikut deskripsi dari lasthalaman manualnya:

last [...] prints information about connect times of users. 
Records are printed from most recent to least recent.  
[...]
The special users reboot and shutdown log in when the system reboots
or (surprise) shuts down. 

Kami menggunakan headuntuk menyimpan 10 acara terbaru dan kami gunakan tacuntuk membalikkan pemesanan sehingga kami tidak bingung dengan fakta bahwa cetakan terakhir dari yang terbaru ke yang paling baru.

ndemou
sumber
Jawaban yang bagus. Dalam debian 9 saya, saya tidak melihat baris "runlevel (ke lvl 0)" untuk shutdown normal.
Jruv
@jruv seperti apa yang kamu lihat? Saya kira itu seharusnya "sistem shutdown"
ndemou
ini adalah contoh yang bagus tetapi bisa mendapat manfaat dari dibangun kembali tanpa tacperintah
mbigras
memeriksa / var / log, itu adalah perintah yang bagus dan info yang ditulis dengan baik. Terima kasih!
Howard Lee
11

Beberapa file log yang mungkin untuk dijelajahi: (menemukan sistem Ubuntu, tapi saya berharap mereka ada di sebagian besar sistem Linux / Unix)

/var/log/debug
/var/log/syslog (will be pretty full and may be harder to browse)
/var/log/user.log
/var/log/kern.log
/var/log/boot

Sekali lagi, file-file log ini hadir pada sistem Ubuntu, jadi nama file mungkin berbeda. The tailperintah adalah teman Anda.


sumber
8

Sederhanakan menggunakan lasttampilan entri shutdown sistem dan jalankan perubahan level dan pemfilteran pada shutdowndan reboot:

last -x shutdown reboot
jhvaras
sumber
1
ndefontenay sudah menyebutkan itu. Terima kasih telah berkontribusi, tetapi harap baca jawaban yang ada terlebih dahulu.
Gilles
Saya pikir jawaban saya disederhanakan ndefontenay satu, tapi terima kasih.
jhvaras
1
@ Gilles Saya harus mengatakan ini agak berbeda, dalam beberapa cara cat foo | grep barvs grep bar foo, tampaknya yang terakhir mampu menyaring dirinya sendiri.
xenoterracide
8

Tidak sepenuhnya memuaskan

Saya memiliki kebutuhan serupa pada Debian 7.8 dan mengamati bahwa pada dasarnya tidak ada pesan yang jelas dan eksplisit dalam log, yang sedikit mengejutkan.

Grep through /var/logakan memberi tahu waktu mesin dimatikan, menunjukkan daemon shutdown yang tepat, dll, tetapi bukan alasan awal.

shutdown[25861]: shutting down for system halt

Solusi lain yang disebutkan ( last -x) tidak banyak membantu.

Mencari cara kerjanya

Bacaan /etc/acpi/powerbtn-acpi-support.shyang meliputi:

jika [-x /etc/acpi/powerbtn.sh]; kemudian
    # Kompatibilitas dengan skrip konfigurasi lama dari paket acpid
    /etc/acpi/powerbtn.sh
elif [-x /etc/acpi/powerbtn.sh.dpkg-bak]; kemudian
        # Kompatibilitas dengan skrip konfigurasi lama dari paket acpid
    # yang masih ada karena diubah oleh admin
        /etc/acpi/powerbtn.sh.dpkg-bak
lain
    # Penanganan normal.
    / sbin / shutdown -h -P sekarang "Tombol power ditekan"
fi

Perhatikan bahwa teks eksplisit diberikan sebagai parameter dari shutdownperintah. Saya berharap string itu akan dicatat secara otomatis oleh program shutdown.

Menyesuaikan log yang lebih baik

Pokoknya, untuk mendapatkan pesan eksplisit saya letakkan teks di bawah ini (sebagai root) di /etc/acpi/powerbtn.shexecutable yang baru dibuatchmod a+x /etc/acpi/powerbtn.sh

#! / bin / sh
logger di /etc/acpi/powerbtn.sh, mungkin "Tombol daya ditekan"
    / sbin / shutdown -h -P sekarang "Tombol power ditekan"

Melakukannya dengan cara ini mungkin akan membuat perubahan yang lebih tahan lama daripada memodifikasi /etc/acpi/powerbtn-acpi-support.sh. Opsi terakhir mungkin akan kehilangan efeknya pada peningkatan paket berikutnya acpi-support-base.

Perhatikan bahwa Ubuntu 14.04 melakukannya secara berbeda ( /etc/acpi/powerbtn.shsudah ada dengan konten yang berbeda dari acpidpaket). Juga, Debian 8 mungkin melakukannya secara berbeda. Jangan ragu untuk menawarkan varian.

Keuntungan!

Dan sekarang ketika tombol power ditekan, garis seperti di bawah ini muncul /var/log/messages, /var/log/syslogdan /var/log/user.log:

logger: in /etc/acpi/powerbtn.sh, presumably Power button pressed

Nah, itu pesan eksplisit di log.

Stéphane Gourichon
sumber
Terima kasih kepada @Bielecki karena menyarankan untuk mempertimbangkan untuk menginstal acpi-support-basedan acpidpaket. Saya belum menguji diri saya. Bisakah Anda menguraikan distribusi dan versi mana yang menghasilkan manfaat?
Stéphane Gourichon
4

Saya hanya punya ide canggung, tapi mungkin berhasil untuk Anda: masukkan perintah lastdan periksa informasi masuk untuk semua pengguna. kemudian, filter pengguna dengan izin yang diperlukan untuk haltyang telah masuk pada saat itu. kemudian periksa .bash_historyfile mereka untuk melihat apakah mereka telah menghentikan atau tidak.

sazary
sumber
1

Dalam kasus saya, saya punya masalah overheating dan menemukan log in / var / log / syslog oleh 'grep shut *' di folder / var / log.

Kesalahan yang dicatat adalah ini:

Feb 23 15:59:49 luca-LIFEBOOK-A530 kernel: [24746.497174] thermal thermal_zone0: critical temperature reached(99 C),shutting down
luandrea
sumber
1

Hanya chip di VM KVM saya (di mana saya bertanya-tanya apakah host reboot melakukan shutdown bersih tamu), saya menemukan apa yang saya butuhkan /var/log/auth.log(selain last -x shutdownmenunjukkan hal yang sama). Di sana garis-garis ini muncul:

Sep  3 23:56:31 Web systemd-logind[531]: Power key pressed.
Sep  3 23:56:31 Web systemd-logind[531]: Powering Off...
Sep  3 23:56:31 Web systemd-logind[531]: System is powering down.
Sep  3 23:55:45 Web systemd-logind[591]: New seat seat0.
Sep  3 23:55:45 Web systemd-logind[591]: Watching system buttons on /dev/input/event0 (Power Button)
Sep  3 23:55:54 Web sshd[805]: Server listening on 0.0.0.0 port 22.
Sep  3 23:55:54 Web sshd[805]: Server listening on :: port 22.

last -xmenunjukkan garis-garis ini, perhatikan bahwa mereka sedang dicetak dalam urutan paling baru-baru-pertama (yaitu membaca baris terakhir pertama, dan kemudian naik), tetapi karena pengaturan ulang jam (23:56 sebelum boot, 23:55 setelah) juga terlihat pada baris sebelumnya, urutannya agak membingungkan:

runlevel (to lvl 2)   3.13.0-129-gener Sun Sep  3 23:55 - 22:04  (22:08)    
reboot   system boot  3.13.0-129-gener Sun Sep  3 23:55 - 22:04  (22:08)    
shutdown system down  3.13.0-123-gener Sun Sep  3 23:56 - 23:55  (00:00)    
runlevel (to lvl 0)   3.13.0-123-gener Sun Sep  3 23:56 - 23:56  (00:00)

Untuk bagian saya, memeriksa bahwa tamu benar-benar ditutup ketika host di-boot, saya juga bisa masuk ke (ssh) salah satu tamu, dan tetap di sana ketika saya mem-boot host, mendapatkan baris-baris ini di terminal:

root@Web:~#
Broadcast message from root@Web
        (unknown) at 22:25 ...

The system is going down for power off NOW!
Connection to web closed by remote host.
Connection to web closed.
stolsvik
sumber
0

alias shutdown ke skrip
, skrip harus memberikan semua parameter, dll ke shutdown asli yang dapat dieksekusi
NAMUN: skrip harus mencatat semua yang ini

LanceBaynes
sumber
2
Skrip shutdown sudah melakukan ini ( last -x)
forcefsck