SSブログ

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 と誤認識されているため。)



nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。