我想知道是否可以让日志程序记录随机电源故障。显然,断电时它没有时间记录,但是有没有办法在断电后重新启动时识别发生断电呢?我知道 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
在引导序列的末尾执行。