【Linux】timedatectlコマンドで日付と時刻を変更する

Linux

timedatectlコマンド

ctlという響きから、systemd絡みであることはなんとなく想像がつきます。systemdを採用しているディストリビューションは、timedatectlコマンドで、日付、時刻、タイムゾーンを管理することができます。

書式

timedatectl コマンド

※コマンドは、下記にある表のコマンドを指します。

コマンド

コマンド 説明
status 現在の時刻と設定を表示する。
set-time 時刻 時刻の場合は「HH:MM:SS」
  日付の場合は「YYYY-MM-DD」で指定する。(同時指定可能)
set-timezone タイムゾーンを設定する。
list-timezone タイムゾーンを一覧表示する。
set-ntp yes|no NTPを使うかどうかを「yes」か「no」で指定する。

検証

検証にはCentOS8を使用しています。

検証1 statusで設定値の確認

まずはステータスを見ます。「timedatectl status」を実行します。

[root@localhost localhost]# timedatectl status 
               Local time: 木 2020-10-01 12:08:59 JST
           Universal time: 木 2020-10-01 03:08:59 UTC
                 RTC time: 木 2020-10-01 03:08:59
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

一覧で見れて便利ですね。

検証2 set-timeで日時の変更

日付と時刻と設定します。現在の設定を確認します。「timedatectl status」を実行します。

[root@localhost localhost]# timedatectl status 
               Local time: 木 2020-10-01 12:08:59 JST
           Universal time: 木 2020-10-01 03:08:59 UTC
                 RTC time: 木 2020-10-01 03:08:59
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

では、「timedatectl set-time “2020-11-01 12:00:00”」を実行して、2020年11月01日の12時00分00秒に設定します。

[root@localhost localhost]# timedatectl set-time "2020-11-01 12:00:00"
[root@localhost localhost]# timedatectl status 
               Local time: 日 2020-11-01 12:00:13 JST
           Universal time: 日 2020-11-01 03:00:13 UTC
                 RTC time: 日 2020-11-01 03:00:14
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

timedatectlコマンドを実行すると、システムクロック、ハードウェアクロックの両方が変更されます。

[root@localhost localhost]# date
2020年 11月  1日 日曜日 12:00:03 JST
[root@localhost localhost]# hwclock 
2020-11-01 12:00:09.013920+09:00

検証3 list-timezonesでタイムゾーンの一覧を取得

timedatectl list-timezones」でタイムゾーンの一覧を表示します。全部表示するとかなりの量なので、Asiaのみを表示。それでも多かったので、途中省略しています。

[root@localhost localhost]# timedatectl list-timezones |grep Asia
Asia/Aden
Asia/Almaty
Asia/Amman
Asia/Anadyr
Asia/Aqtau
Asia/Aqtobe
Asia/Ashgabat
Asia/Atyrau
Asia/Baghdad
Asia/Bahrain
Asia/Baku
Asia/Bangkok
Asia/Barnaul
(途中省略)
Asia/Thimphu
Asia/Tokyo
Asia/Tomsk
Asia/Ulaanbaatar
Asia/Urumqi
Asia/Ust-Nera
Asia/Vientiane
Asia/Vladivostok
Asia/Yakutsk
Asia/Yangon
Asia/Yekaterinburg
Asia/Yerevan

上記を参考に、タイムゾーンを変更します。

検証4 set-timezoneでタイムゾーンの変更

timedatectl set-timezone」でタイムゾーンを変更します。せっかくなので、日本ではない場所を指定してみました。

[root@localhost localhost]# timedatectl set-timezone Asia/Bangkok 
[root@localhost localhost]# timedatectl status 
               Local time: 日 2020-11-01 10:04:58 +07
           Universal time: 日 2020-11-01 03:04:58 UTC
                 RTC time: 日 2020-11-01 03:04:58
                Time zone: Asia/Bangkok (+07, +0700)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

変更されました。

検証5 set-ntp yesでNTPを有効化

NTPの設定ができます。けっこう手軽です。設定前は「NTP service」が「inactive」になっています。

[root@localhost localhost]# timedatectl status 
               Local time: 日 2020-11-01 12:05:20 JST
           Universal time: 日 2020-11-01 03:05:20 UTC
                 RTC time: 日 2020-11-01 03:05:21
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

timedatectl set-ntp yes」を実行します。

[root@localhost localhost]# timedatectl set-ntp yes

※すぐには同期されません。ちょっと待ちます。ステータスを再確認します。

[root@localhost localhost]# timedatectl status 
               Local time: 月 2020-09-07 15:52:36 JST
           Universal time: 月 2020-09-07 06:52:36 UTC
                 RTC time: 日 2020-11-01 03:07:27
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

同期されました。※すいません。日付は「2020-09-07」が正しい日付です。

システムクロックとハードウェアクロックの設定を見ます。

[root@localhost localhost]# date
2020年  9月 07日 月曜日 15:55:06 JST
[root@localhost localhost]# hwclock 
2020-11-01 12:10:01.676381+09:00

システムクロックは反映されていますが、ハードウェアクロックは変更されていません。
「hwclock -w」を実行して、システムクロックの時刻をハードウェアクロックに同期します。

[root@localhost localhost]# hwclock -w
[root@localhost localhost]# hwclock 
2020-09-07 15:56:29.059226+09:00

同期されました。