前回の起動時のシステム稼働時間

前回の起動時のシステム稼働時間

システムが突然シャットダウンした場合、いつシャットダウンされたかを知ることは可能ですか? 突然とは、停電または sysrq マジック キーが原因のことを意味します。数秒ごとに何かをログに記録している場合は答えが得られますが、そうでない場合は何か方法がありますか?

カスタマイズされたコンソールベースのシステムを使用しています。カーネルは5.3です

答え1

システムがいつ再起動されたかは、いくつかの方法でわかります...「稼働時間」、「最後の再起動」など。シャットダウンされた時期を知るのは、少し面倒です。rsyslogd を実行して定期的にシステム ログを記録している場合は、/etc/rsyslogd.conf に次の内容を追加することで、モジュール immark を「数秒ごとに何かを記録する」ルーチンとして使用できます。

$ModLoad immark
$MarkMessagePeriod <your time granularity here, in seconds>
$ActionWriteAllMarkMessages on

面倒なことはせずに、メッセージ ファイル内の 2 つのうちの 1 つを見ることもできます。システムが起動したときにファイルがローテーションされている場合は、'ls -l' を使用してファイルの以前のバージョンの日付を確認するだけで、システムが書き込みを停止した時期をかなり正確に推測できます。システム ログをローテーションしない場合は、再起動を示す行の直前の行のタイムスタンプを確認することで、同じ精度を実現できます。再起動は次のようになります。

2020-03-29T03:20:01.529437-04:00 [hostname] rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-41.el7_7.2" x-pid="1615" x-info="h
ttp://www.rsyslog.com"] rsyslogd was HUPed

シャットダウンが予期していなかった場合は、システム ロガーがシャットダウンする前にログにメッセージを書き込むため、処理は簡単になります。

もちろん、システム ログをオフにしている場合は、このすべてが無意味になります。システム ログにまだログを記録している場合は、そこにあるいくつかのファイルの統計を取得し、変更日時を確認することで、システムがいつ停止したかを大まかに把握できます。

root# stat /var/log/messages-01.gz
  File: '/var/log/messages-01.gz'
  Size: 185529          Blocks: 368        IO Block: 4096   regular file
Device: fd06h/64774d    Inode: 12689803    Links: 1
Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (658178/  mssgro)
Access: 2020-04-08 10:27:47.691311523 -0400
Modify: 2020-04-05 03:01:34.000000000 -0400  <=== that's what you're after ==
Change: 2020-04-07 18:16:40.252668164 -0400
 Birth: -

選択したファイルから最新のものを選択すると、システムが停止した時刻をかなり正確に推定できます。

ほんのいくつかのアイデアですが、お役に立てれば幸いです。

関連情報