timedatectlコマンドとは

timedatectlコマンドはLinuxシステムで時計やタイムゾーンを設定するためのコマンド。

timedatectlコマンドはsystemdに含まれるコマンドで、CentOS7以降、Ubuntu15.04以降で採用されている。

timedatectlコマンドが使用される前はタイムゾーンの変更は所定のファイルを直接編集したり、シンボリックリンクを張ったりする必要があったが、 timedatectlコマンドを使用することで簡単にタイムゾーンを変更できるようになった。

現在の設定値の確認

現在の設定値を確認するには、timedatectl showコマンドを実行する。

$ timedatectl show
Timezone=UTC
LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=yes
TimeUSec=Sat 2023-07-01 01:52:26 UTC
RTCTimeUSec=Sat 2023-07-01 01:52:26 UTC

それぞれの項目の意味は以下の通り。

  • Timezone:タイムゾーン
  • LocalRTC:ローカルタイムをRTCに格納するか
  • CanNTP:NTPサーバーを使用できるか
  • NTP:NTPサーバーを使用するか
  • NTPSynchronized:NTPサーバーと同期しているか
  • TimeUSec:システムクロックの現在時刻
  • RTCTimeUSec:RTCの現在時刻

タイムゾーンを設定する

timedatectlコマンドでタイムゾーンを設定する方法を紹介する。

現在のタイムゾーン設定値の確認

現在のタイムゾーンの設定値は先述のtimedatectl showコマンドを使って確認できる。

$ timedatectl show | grep Timezone
Timezone=UTC

利用可能なタイムゾーンの一覧

利用可能なタイムゾーンは以下のコマンドで確認できる。

$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau

Asia/Tokyoがあるかどうかを確認する。

$ timedatectl list-timezones | grep Tokyo

タイムゾーンの設定

タイムゾーンを設定するには、以下のコマンドを使用します。

$ sudo timedatectl set-timezone [タイムゾーン]

上記の[タイムゾーン]には、先ほど確認したタイムゾーンの一覧から適切なタイムゾーンを指定する。

Asia/Tokyoを設定する場合は以下のコマンドを実行する。

$ sudo timedatectl set-timezone Asia/Tokyo

再度確認すると設定値が変更されている。

$ timedatectl show | grep Timezone
Timezone=Asia/Tokyo

指定したいタイムゾーンが無い場合の対処法

もし指定したいタイムゾーンが一覧にない場合はtzdataパッケージをインストールする必要がある。

ubuntuの場合は以下のコマンドでインストールできる。

$ sudo apt install tzdata

CentOSの場合は以下のコマンドでインストールできる。

$ sudo yum install tzdata

システムクロックを設定する

システムクロックのリモートサーバーとの同期

ntpを有効にしてシステムクロックをリモートサーバーと同期させるには以下のコマンドを実行する。

$ sudo timedatectl set-ntp true

オフにする場合は以下のコマンドを実行する。

$ sudo timedatectl set-ntp false

固定値の指定

システムクロックを固定値を指定して設定するには以下のコマンドを実行する。

$ sudo timedatectl set-time "YYYY-MM-DD hh:mm:ss"

$ sudo timedatectl set-time "2022-07-01 00:00:00"

ただしntpが有効な場合は自動的に同期されるようになっているので、以下のようにエラーとなり指定できないようになっている。

$ sudo timedatectl set-time "2022-07-01 00:00:00"
Failed to set time: NTP unit is active

もし固定値を指定したい場合は先述のsudo timedatectl set-ntp falseコマンドでntpによる同期をオフにする必要がある。