Logs

如何從日誌中找出導致系統關閉的原因?

  • June 4, 2021

例如,我在/var/log/messages

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

有沒有辦法找出導致關機的原因?例如,它是從控制台執行的,還是有人按下電源按鈕等?

嘗試以下命令:

顯示上次重啟條目的列表: last reboot | less

顯示上次關閉條目的列表: last -x | less

或更準確地說: last -x | grep shutdown | less

但是你不會知道是誰做的。如果你想知道是誰做的,你需要添加一些程式碼,這意味著你下次就知道了。

我在網上找到了這個資源。它可能對您有用:

如何找出誰或什麼停止了我的系統

TLDR

使用這兩個命令並繼續閱讀以獲取更多資訊。

last -x | head | tac

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'

1)關於last -x 命令的輸出

執行此命令*並將輸出與以下範例進行比較:

last -x | head | tac

正常關機範例

正常關機和開機看起來像這樣(請注意,您有一個關機事件,然後是一個系統啟動事件):

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)       

在某些情況下,您可能會看到這一點(請注意,沒有關於關閉的行,但係統處於執行級別 0,即“停止狀態”):

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)   

意外關閉範例

斷電導致的意外關機如下所示(請注意,您有一個系統啟動事件,而之前沒有系統關機事件):

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)    

2)關於 /var/log/ 中的日誌

過濾最有趣的日誌消息的 bash 命令如下:

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'

當發生意外斷電或硬體故障時,文件系統將無法正確解除安裝,因此在下次啟動時,您可能會收到如下日誌:

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.

當系統因使用者按下電源按鈕而關閉時,您會得到如下日誌:

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

只有當系統有序關閉時,您才會得到如下日誌:

rsyslogd: ... exiting on signal 15

當系統因過熱而關閉時,您會收到如下日誌:

critical temperature reached...,shutting down

如果你有一個 UPS 並執行一個守護程序來監控電源和關機,你顯然應該檢查它的日誌(NUT 登錄 /var/log/messages 但 apcupsd 登錄 /var/log/apcupsd*)


筆記

*:這是last其手冊頁中的描述:

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. 

我們head用來保留最近的 10 個事件,並且我們tac用來顛倒順序,這樣我們就不會被從最近到最近的事件最後列印的事實混淆。

引用自:https://unix.stackexchange.com/questions/9819