如何检查上次关机是否干净?

如何判断我的Ubuntu 11.10系统上一次关机是否正常完成,或者在关机之前是否已经断电?

2请查看 /var/log/syslog.0。 - Gigili
5个回答

如果机器正常关机,那么在/var/log目录下的kern.log文件中必定有一个关机日志。每当正常启动时,操作系统会在kern.log中写入相应的日志。因此,如果启动和关机过程正常,则每个启动日志都必须先于一个关机日志。
每当发生正常关机时,在kern.log中会写入"Kernel logging (proc) stopped."。同样地,每当发生启动时,在kern.log中会写入"imklog 5.8.1, log source = /proc/kmsg started."。
如果关机是正常的而不是突然断电,这两条消息应该按照顺序出现。如果前一次关机是正常的,就不应该有"imklog 5.8.1, log source = /proc/kmsg started."消息而没有"Kernel logging (proc) stopped."消息。这两条消息应该始终成对出现在日志中。
只需在终端中输入:
gedit /var/log/kern.log

检查关机和启动日志对。如果在任何地方找不到它们成对出现,那么关机肯定是突然的。

1请将gedit替换为您的默认文本编辑器。 - Vikramjeet
1我的 kern.log 是空的。 - Nade
2@Nade 尝试 kern.log.1 - a different ben
2我的日志中没有这两个短语,甚至其中的一部分也没有。我真的需要知道我的电脑是否被正确地关机了,因为我相信有一个孩子只是长按电源按钮。 - KI4JGT
1从Ubuntu 16.04开始,这似乎不再正确。即使我不执行cat /var/log/syslog | grep -i "stopped"(以及类似的操作,也进行了反向测试),尽管这显然是以前关机消息的一部分...(在关闭时按ESC键以关闭启动画面时可见的日志内容)- 有人有更新吗? - Frank N
我可以确认这个答案在最近的Ubuntu版本中不再适用。 - undefined

我使用last命令。它列出了重新启动和崩溃的信息。

要回答这个问题,你需要解释如何使用“last”。 - undefined

从Ubuntu 16.04开始,正确关机后再进行适当的重启,将会在/var/log/syslog中依次写入这两行内容。
Mar  9 14:14:06 *YOUR-HOSTNAME* rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="1086" x-info="http://www.rsyslog.com"] exiting on signal 15.
Mar  9 15:23:42 *YOUR-HOSTNAME* rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="1069" x-info="http://www.rsyslog.com"] start

1在Ubuntu 20.04中,情况已经不再如此。我没有任何关于rsyslogd的提及。哦,而关机时的最后一条日志记录是systemd[1]: Stopped QEMU KVM preparation - module, ksm, hugepages.这是因为我在其中安装了virsh相关的东西。 - John

我正在使用Ubuntu 22.04。我发现以下是最简单的方法: last -Fxn2 shutdown reboot
请注意,last以相反的顺序显示内容,但正常关机会显示关机后的启动(仍在运行):
reboot   system boot  5.15.0-86-generi Thu Oct 19 01:02:05 2023   still running
shutdown system down  5.15.0-84-generi Thu Oct 19 03:03:23 2023 - Thu Oct 19 03:03:30 2023  (00:00)

停电或其他混乱的停机只会显示重新启动,中间没有任何停机。
reboot   system boot  5.15.0-86-generi Thu Oct 19 01:02:05 2023   still running
reboot   system boot  5.15.0-86-generi Tues Aug 04 13:12:09 2023   still running

更多信息和其他方法可以在这里找到:

https://access.redhat.com/articles/2642741


嗨,你可以运行一个脚本来检查上次关机是否正常。 只需将以下代码放入一个bash脚本中,在系统启动后运行它即可。
#!/bin/bash
B="1"
touch data_file
echo $(($(grep -nr "$(cat  /var/log/kern.log | grep "$(date -d $(who -b | awk '{printf $3}') '+%b %-d')" | grep imklog   | grep $(cat  /var/log/kern.log | grep "$(date -d $(who -b | awk '{printf $3}') '+%b %-d')" | grep imklog | cut -d' ' -f3 | sort -k1 -r | sort --unique --stable -k2,3))" /var/log/kern.log | awk '{printf $1}' | grep -oE "[[:digit:]]{1,}")-$B))  >  data_file


if [[

($(sed -n $(cat data_file)p /var/log/kern.log | awk '{print $6}') == "Kernel") && 
($(sed -n $(cat data_file)p /var/log/kern.log | awk '{print $7}') == "logging") &&
($(sed -n $(cat data_file)p /var/log/kern.log | awk '{print $8}') == "(proc)") &&
($(sed -n $(cat data_file)p /var/log/kern.log | awk '{print $9}') == "stopped.") 


]]; then

  echo Last Shutdown-proper

else

   echo Last Shutdown_not proper 

fi

rm data_file

注意:请以root用户身份运行脚本。它不会对您的系统造成任何损害 :)

很抱歉,这个脚本在Ubuntu 20+上总是报告非正常关闭的情况 :-( - undefined