内核记录电源故障

内核记录电源故障

我想知道是否可以让日志程序记录随机电源故障。显然,断电时它没有时间记录,但是有没有办法在断电后重新启动时识别发生断电呢?我知道 Red Hat(以及一般的 Linux)有一些非常好的日志 ( /var/log),但我不认为它有任何可以处理电源故障的本机日志记录程序。

如果没有日志记录程序,我也在讨论更改启动脚本。 BIOS设置为始终开机;因此,如果发生电源故障,它会自动重新启动。

系统只有在发生电源故障时才会关闭;它永远不会被手动关闭。

因此,我正在考虑mail在启动脚本中添加一些内容(简单的命令),因为第一次启动后的每次启动都标志着电源故障。不幸的是,我不知道这样的命令的文件或位置或实际语法是什么。

答案1

有没有办法在断电后重新启动时识别是否发生了电源故障?

请参阅 SMBIOS 的 DMI“唤醒类型”。

$ sudo dmidecode | fgrep 'Wake-up Type'
    Wake-up Type: AC Power Restored

您可以通过 /sys/fireware/dmi/entries/1-0/... 以编程方式检索此信息

答案2

重新启动记录在系统的系统日志中,使用系统(例如 RHEL 7、Fedora)。您可以通过以下方式查找它们:

# journalctl --list-boots
[..]
0 51545e9739db4eb1ab602dd338a937b1 Wed 2014-08-06 10:58:04 CEST—Mon 2014-08-18 22:31:43 CEST

传统上,重新启动也通过 wtmp 记录,即您可以使用以下last命令显示它们:

# last
[..]
reboot   system boot  3.11.10-301.fc20 Wed Jun  4 08:15 - 18:43  (10:27)

(Fedora 20 系统的输出)

Ubuntu 手册页last解释了这种机制:

   The pseudo user reboot logs in each time the system is rebooted.   Thus
   last  reboot will show a log of all reboots since the log file was cre‐
   ated.

(根据您的发行版,wtmp 文件可能会在长时间正常运行期间轮换,从而不会显示上次重新启动的信息)

要获取重新启动的通知,您可以通过 cron 作业间接设置它们,例如:

#!/bin/bash
set -e
set -u
uptime=$(awk '{print $1}' /proc/uptime)
if [ -f /var/tmp/last_uptime ]; then
  last_uptime=$(cat /var/tmp/last_uptime)
  if [ $uptime -lt $last_uptime ]; then
    echo System was rebooted
    exit 1
  fi
fi
echo $uptime > /var/tmp/last_uptime

或者,您可以在引导过程中运行邮件命令。有了systemd它可以这样做:

# echo 'echo Just rebooted at $(date) | mail juser@example' >> /etc/rc.d/rc.local
# chmod 755 /etc/rc.d/rc.local

使用与 systemd 不同的其他发行版可能会/etc/rc.local在引导序列的末尾执行。

相关内容