Linuxのタイムゾーン
タイムゾーンとは?
Linuxやさまざまなシステム(特に海外のクラウドサービスなど)を利用しているとよく聞くタイムゾーンという言葉を聞きます。これは「標準時間帯」のことを指しますが、地球上のすべての場所はUTC(協定世界時)からの時差区分によるいずれかの地域に属しておりその地域ごとに利用されている時間帯が異なります。
また時間の基準として 標準時(Standard Time)と協定世界時(UTC: Coordinated Universal Time)は、どちらも時間の基準として使用されます。それぞれ異なる特徴と目的があります。以下にそれぞれの詳細と違いについて説明しますね。
標準時
- 定義: 標準時は、特定の地域や国で法的に定められた時間の基準です。
- 地域ごとの時間: 標準時は、各タイムゾーンごとに異なります。例えば、日本標準時(JST)はUTC+9、アメリカ東部標準時(EST)はUTC-5などです。
- 季節時間の調整: 多くの地域では、夏時間(DST: Daylight Saving Time)を採用しており、夏の間は標準時を1時間進めます。例えば、アメリカ東部では夏時間中はUTC-4となります。
- 地域の名前で表されることが多い: 標準時はしばしば「Asia/Tokyo」や「America/New_York」のように、都市や地域の名前で表されます。
協定世界時
- 定義: UTCは、原子時計と地球の自転を基に調整された世界標準の時間です。これは全世界共通の基準時刻です。
- 不変の基準: UTCは、一年を通じて変わらない基準時間であり、夏時間の調整は行われません。
- 高精度: UTCは、非常に高精度な原子時計に基づいており、必要に応じて「うるう秒」を挿入することで地球の自転に合わせています。
- グリニッジ標準時(GMT)との関係: UTCはGMT(Greenwich Mean Time)にほぼ相当しますが、UTCはより正確であり、うるう秒の調整を含むため、厳密にはGMTとは異なります。
つまり、標準時は地域ごとの法的な基準時間を意味し、協定世界時間は国際的な通信や科学分野などに利用される高精度な基準時間を意味しています。生活する上では標準時で問題ありませんが、システムなどより高精度な時間の管理が必要な場合は協定世界時間を利用する必要があります。
タイムゾーン管理の重要性
日本在住で日本の顧客向けにITサービスを提供している分にはあまりタイムゾーンについて意識することはないかもしれません。しかしグローバルに提供されているクラウドサービスや顧客が大企業で日本国外の顧客も考慮するようなシステムを扱う場合、タイムゾーンが重要になります。タイムゾーンの管理が重要である理由は下記のような観点が考えられます。
- 問題の特定が困難になる可能性
ログファイルのタイムスタンプにはイベントが発生した時間が記録されます。正確なタイムゾーン設定がされていないと問題の発生時刻を正確に追跡するのが難しくなり、トラブルシューティングや監査が難しくなります。 - システム動作の正確性
タスクスケジューラー(例えば cronなど)は、指定された時刻にジョブを実行します。タイムゾーンが正しく設定されていないと、ジョブが意図しない時間に実行される可能性があります。またAWSではIoTにおけるサーバー証明書検証においてタイムゾーンの重要性を指摘しており、システム管理者には適切なタイムゾーンの管理が求められています。 - データの一貫性
データベースに保存されるレコードには、しばしばタイムスタンプが含まれます。これらのタイムスタンプが正確でないと、データの一貫性が損なわれ、後でデータを分析する際に問題が生じる可能性があります。また 一部の業界(例えば金融業界など)や地域では法的な要求事項として特定のタイムゾーンでのログ記録や報告が義務付けられていることがあります。
タイムゾーンを日本時間に設定する
Linuxの初期タイムゾーン
Linuxの初期状態ではUTC基準で時刻が表示されていると思います。例えば下記のようにdate
コマンドを実行すると下記のようにUTC基準での時刻が表示されます。またtimedatectl
で詳細なタイムゾーン情報を確認することができます。出力結果から分かるように初期状態ではUTC(2行目、8行目)となっているので、日本在住で日本時間でシステムを管理したい場合はこの設定を変更する必要があります。
date
Sun Jun 9 13:41:33 UTC 2024
timedatectl
Local time: Sun 2024-06-09 13:41:57 UTC
Universal time: Sun 2024-06-09 13:41:57 UTC
RTC time: Sun 2024-06-09 13:41:57
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
タイムゾーンを恒久的に日本時間にする
タイムゾーンの変更はとても簡単です。下記のようにtimedatectlコマンドに指定のオプションを追加して実行することでタイムゾーンを日本時間に設定することができます。imedatectl
を再度実行してみると6行目でタイムゾーンがAsia/Tokyoに変更されていることが確認できます。
sudo timedatectl set-timezone Asia/Tokyo
timedatectl
Local time: Sun 2024-06-09 22:50:01 JST
Universal time: Sun 2024-06-09 13:50:01 UTC
RTC time: Sun 2024-06-09 13:50:01
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
時刻を同期させる
タイムゾーンを変更した後は時刻の同期も設定し、正確なシステム運用ができる環境を構築しましょう!時刻同期のコマンドは下記のようになります。時刻同期では、NTP(Network Time Protocol)を使用してインターネット上のタイムサーバーと時刻を同期するのが一般的です。最後に設定を反映させるためsystemd-timesyncd
を再起動しておきましょう。
vi /etc/systemd/timesyncd.conf
[Time]
NTP=ntp.nict.jp
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
systemctl restart systemd-timesyncd
まとめ
本記事ではタイムゾーンの基礎と日本時間の設定・時刻の同期方法について学習しました。本文でも述べましたが、海外とのシステム連携をする際に重要となりますので、本記事で紹介した内容をベースに時刻設定の基礎について理解を深めてくださいね!