Ядро регистрируется при сбое питания

Мне было интересно, возможно ли иметь документацию по протоколированию случайного сбоя питания. Понятно, что у него не будет времени для регистрации при сбое питания, но есть ли способ распознать сбои питания, возникающие при перезагрузке после сбоя? Я знаю, что Red Hat (и Linux в целом) имеет несколько хороших журналов ( /var/log ), но я не думаю, что у него есть какая-либо собственная программа ведения журнала, которая может справиться с сбоем питания.

Если нет программы ведения журнала, я также обсуждал изменение сценариев загрузки. BIOS настроен так, чтобы он всегда включался; поэтому, если происходит сбой питания, он автоматически перезагружается.

Единственный раз, когда система выключается, – если происходит сбой питания; он никогда не будет вручную отключен.

Поэтому я подумывал добавить что-то (простое как mail команда) к сценариям загрузки, потому что каждая загрузка после самой первой загрузки указывает на сбой питания. К сожалению, я не знаю, какой файл или местоположение или фактический синтаксис такой команды будет.

Есть ли способ распознать сбой питания при перезагрузке после сбоя?

См. DMI «Тип пробуждения» SMBIOS.

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

Вы можете получить это программно через / sys / fireware / dmi / entries / 1-0 / …

Перезагрузки документируются в системном журнале систем, использующих systemd (например, 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 в конце последовательности загрузки.