時間が9時間進んでいる

■概要

お名前.comのVPSにCentOS7をインストールした。
時間が9時間進んでいる。直そうと思ったら結構奥が深かった。

■環境

OS:CentOS7.2

■直し方

現在は2016-12-08 20:34。Local timeが9時間進んでいるのがわかる。

# timedatectl
      Local time: 金 2016-12-09 05:34:46 JST
  Universal time: 木 2016-12-08 20:34:46 UTC
        RTC time: 木 2016-12-08 20:34:46
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

お名前.comのVPSなんだが、ハードウェアクロック(RTC time)が現在時間(日本時間)になってる・・。
ハードウェアクロックはUTCにしといてくださいよ、お名前.comさん。

ちなみに、CentOSインストール時の以下の設定を「有効」にした。
「システム クロックでUTCを使用」を有効
「システム クロックでUTCを使用」を無効

これは、おそらく以下のような意味。
「システム クロックでUTCを使用」を有効⇒ハードウェア クロックをUTCとして認識。
「システム クロックでUTCを使用」を無効⇒ハードウェア クロックをローカル タイムとして認識。

つーか、CentOSも日本語おかしいでしょ。
システムクロックじゃなくてハードウェアクロックでしょ。
「ハードウェア クロックでUTCを使用」
「ハードウェア クロックでLocalTimeを使用」
とかにしてくれんかね。

ハードウェアクロックの方は、仮想マシンなのでたぶんどうしようもない。
システムクロック(Univesal time)の方を変更しよう。

# hwclock -s --localtime
# timedatectl
      Local time: 木 2016-12-08 20:35:17 JST
  Universal time: 木 2016-12-08 11:35:17 UTC
        RTC time: 木 2016-12-08 20:35:17
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

hwclockの「-s」は「ハードウェアクロックからシステムタイムをセットする」
「–localtime」は「ハードウェアクロックをローカルタイムとする」という意味。

一見直ったように見えるが、再起動するとまた9時間進んでしまう。
時計がずれないようにするには、/etc/adjtimeの値をハードウェアクロックの設定にあわせる必要がある。
※/etc/adjtimeはハードウェアクロックがUTCかLOCALか識別するファイル

現在の/etc/adjtimeの値は以下。

# cat /etc/adjtime
0.0 0 0.0
0
UTC

なるほど、UTCになっている。
おそらく※1で有効を選択するとUTC、無効を選択するとLOCALになるのだろう。

今回の場合、ハードウェアクロックはlocaltimeなので以下を実行する。

# timedatectl set-local-rtc true

これで/etc/adjtimeの値がUTCからLOCALに書き換わった。
再起動しても9時間進むことはない。

# cat /etc/adjtime
0.0 0 0.0
0
LOCAL

timedatectlも実行してみる。

# timedatectl
      Local time: 木 2016-12-08 20:37:11 JST
  Universal time: 木 2016-12-08 11:37:11 UTC
        RTC time: 木 2016-12-08 20:37:11
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: yes
      DST active: n/a

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

「RTC in local TZ」がyesになった。
そして、RTCはUTCにしろ!って怒られるw

■時刻同期

ついでに、時刻同期の設定を行う。
CentOS7では、ntpではなくchronyというNTPクライアント兼サーバがある。
ntpdもそうだが、たかが個人webサーバの時刻合わせのためだけにデーモンを起動させたくない。
ポートもあけたくない。
ntpdateをdaily(心配ならhourly)で一発たたけば十分だと思っている。

# vi /etc/cron.daily/ntpdate
-------------------------------
#!/bin/bash

/sbin/ntpdate ntp.jst.mfeed.ad.jp 2>&1 | logger -t ntpdate -p local0.info
-------------------------------
# chmod 755 /etc/cron.daily/ntpdate

これで時間ずれの心配はなくなった。

debian系は、systemd-timesyncdという便利なSNTPクライアントがあるのでこれを使う。
systemd-timesyncdについては次回。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする