RTCにlocaltimeを設定する場合の問題点への対応 [CentOS]
OS: CentOS 7.9
rsyslog-8.24.0-57.el7_9.x86_64
systemd-219-78.el7_9.2.x86_64
1. 発生事象
RTC に localtime を設定した場合、syslog で部分的に時間の逆行が発生する。
(RTC: real-time clock、ハードウェアクロックとも呼ばれる。)
・一部のログで 9 時間先の日時が出力される。
kernel、systemd、journald のログで発生する。
・デフォルト設定では、/var/log/messages で発生する。
(補足)
Windows とのマルチブートのため、RTC に localtime を設定している。
2. 原因
systemd が RTC への localtime の設定に完全には対応していないためである。
・systemd では、RTC への UTC の設定を推奨している。
cf. `timedateclt status`
・完全対応されるのを待っていたが、状況は変わっていない。
3. 対処方法
syslog の journald との連携を無効化する。
(systemd が導入される前の実行形態に戻す。)
実施手順は、下記の通りである。
(1) /etc/rsyslog.conf の編集
(a) imjournal モジュール、および関連機能を無効にする。
#$ModLoad imjournal # コメントにする $OmitLocalLogging off # on から off に変更する #$IMJournalStateFile imjournal.state # コメントにする
(b) imuxsock モジュールを有効にする。
$ModLoad imuxsock
(c) imklog モジュールを有効にする。
$ModLoad imklog
(2) /etc/rsyslog.d/listen.conf の編集
# diff listen.conf listen.conf.org 1c1 < #$SystemLogSocketName /run/systemd/journal/syslog --- > $SystemLogSocketName /run/systemd/journal/syslog
(3) 変更の反映
(a) rsyslog の再起動
# systemctl restart rsyslog # systemctl status rsyslog
(b) journald の再起動
# systemctl restart systemd-journald # systemctl status systemd-journald
(補足)
・初期設定では、imuxsock と imjournal が有効、imklog が無効である。
・この対応後も last コマンドでの、reboot の行の開始時刻は修正されない。
運用で対応する必要がある。
・Windows で RTC への UTC の設定に対応することもできる(レジストリの変更が必要)。
別の問題が発生するため、今回は採用しない。
(Windows の終了時にシステムクロックを RTC に反映できなくなる。)
4. 備考
(1) last コマンドの実行結果の補正
reboot ユーザーの行について、下記の補正を行う。
・ログイン時刻を -9(h) し、ログイン時間を +9(h) する。
(localtime を UTC と誤認識されているため。)
コメント 0