ロガーでランダムな停電を記録できるかどうか疑問に思います。当然電源が切れた時の時間記録はありませんが、停電後再起動時に停電が発生した時点を知る方法がありますか?私は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
再起動は、以下を使用してシステムのsyslogに書き込まれます。システム(例: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
あるいは、起動プロセス中にmailコマンドを実行することもできます。それで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
起動シーケンスが終了したときに実行される可能性があります。