CodeGym /コース /Docker SELF /タイムゾーンと時間の管理: コマンドtimedatectl

タイムゾーンと時間の管理: コマンドtimedatectl

Docker SELF
レベル 3 , レッスン 2
使用可能

タイムゾーンと時間の管理: コマンド timedatectl

1. Linuxでの時間管理

なぜ時間の設定を正しくすることが重要なのか?

例えば、システムログでエラーを追跡しようとしているのに、ログの時間が実際の時間と一致していないとしたらどうしよう? さらに悪いことに、国際的な会社のサーバーがユーザーごとに異なる時間を表示しているとしたら。それを防ぐために、時間の正しい設定はただの便利さではなく、システムの作業、ファイルの同期、セキュリティの維持(SSL証明書は時間に依存する)や作業タスクの調整にとって至関重要なんだよ。

Linuxでは時間は2つの形式で存在するよ:

  1. システム時間 (System Time) — OSがそのタスクに使用する時間。
  2. ハードウェア時間 (Hardware Time) — ハードウェアレベル(BIOS/UEFI)に保存されてる時間。

私たちはツールtimedatectlを使ってシステム時間を操作するよ。


2. timedatectl コマンドの基本

timedatectl は時間管理のための便利なインターフェイスを提供するコマンドユーティリティだよ。これを使うと以下ができる:

  • 現在の時間とタイムゾーンの設定を確認する;
  • システム時間とハードウェア時間を設定する;
  • タイムゾーンを設定する;
  • NTP (Network Time Protocol) を使った時間同期を有効または無効にする。

現在時刻を確認する

まずは一番簡単なところから始めよう。現在の時間と設定を確認するには、このコマンドを実行するだけ:

timedatectl

出力例:

Local time: Tue 2023-10-31 12:34:56 MSK
Universal time: Tue 2023-10-31 09:34:56 UTC
RTC time: Tue 2023-10-31 09:34:56
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

出力フィールドの説明:

  • Local time: ローカル(システム)時間。
  • Universal time: UTC形式の時間(協定世界時)。
  • RTC time: ハードウェア時間(BIOS/UEFIレベルの時間)。
  • Time zone: 現在のタイムゾーン。
  • System clock synchronized: NTPを通じて時計が同期されているかどうか。
  • NTP service: 時間同期サービスがアクティブであるかどうか。
  • RTC in local TZ: ハードウェア時間がローカルタイムゾーンに一致しているか。

タイムゾーンの設定と変更

引っ越しやプロジェクトの要件変更に伴って、タイムゾーンを変更する必要がある場合があるよ。例えば、サーバーがニューヨークにセットアップされていたけど、今はモスクワのユーザーをサポートしている場合。タイムゾーンは/usr/share/zoneinfoディレクトリで確認できる。

利用可能なタイムゾーンを表示するには次のコマンドを実行:

timedatectl list-timezones

出力は以下のような大きなリストになる:

Africa/Abidjan
America/New_York
Asia/Tokyo
Europe/Moscow

新しいタイムゾーンを設定するには、このコマンドを使おう:

sudo timedatectl set-timezone Europe/Moscow

タイムゾーンが変更されたか確認するには、再び以下を実行:

timedatectl

実践課題

  1. サーバーの現在のタイムゾーンを見つける。
  2. タイムゾーンをUTCに変更する。
  3. タイムゾーンを元のローカルに戻す。

3. 時間を手動で設定する

現代のサーバーは通常NTPを使って時間を同期しますが、手動で時間を設定する必要がある場合もあります。これは、サーバーがインターネットにアクセスできない孤立したネットワークにある場合などに役立ちます。

まずは現在のシステム時間を確認してみましょう:

date

新しい時間を設定するには以下のコマンドを使います:

sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"

例えば、2023年11月1日12:00に設定するには:

sudo timedatectl set-time "2023-11-01 12:00:00"

その後、結果を再確認してください:

timedatectl

ハードウェアクロックの設定

ハードウェアクロック(RTC — Real-Time Clockとも呼ばれる)はBIOS/UEFIレベルで管理されます。ハードウェアクロックがシステムクロックと同期していない場合、再起動時に問題が発生する可能性があります。同期するには以下を実行します:

sudo hwclock --systohc

このコマンドはシステムクロックに基づいてハードウェアクロックを設定します。

逆に(ハードウェアクロックを基にシステムクロックを同期させたい場合)は以下を使ってください:

sudo hwclock --hctosys

4. NTPを使った時間の同期

NTPを使った時間の同期は、リモートサーバーを利用して自動的に現在の時間を維持する方法だよ。ほとんどの現代的なLinuxディストリビューションでは、NTPはデフォルトで有効になってるよ。

NTP設定の確認

以下を実行してね:

timedatectl status

もしNTPが無効になってたら(NTP serviceinactiveを表示している場合)、これを有効にしてね:

sudo timedatectl set-ntp true

NTPを無効にしたい場合は、以下を実行してね:

sudo timedatectl set-ntp false

NTPが動作しない場合は、関連するサービスがアクティブであることを確認してね。例えば、systemd-timesyncdを使っているシステムでは、サービスがアクティブであることを確認しよう:

sudo systemctl status systemd-timesyncd

5. 実践練習

課題

  1. システムのタイムゾーンをUTCに設定してください。
  2. システム時間を手動で2023年11月1日12:00:00に設定してください。
  3. NTPでの時間同期を有効にしてください。

確認

課題を完了した後、以下を確認してください:

  • システム時間が設定したパラメータと一致している。
  • タイムゾーンがUTCに変更されている。
  • NTPサービスが有効になっている。

6. よくある間違いと注意点

  1. "RTC in local TZ: no"がローカルな時刻ゾーンに一致しない。 多くのシステムでは、異なる時刻ゾーンでの混乱を避けるために、ハードウェア時刻にUTCを使用することを好みます。これはエラーではなく、ただの好みです。

  2. 時間変更時のアクセスエラー。 timedatectlコマンドはスーパーユーザ権限を必要とします。sudoを使用していることを確認してください。

  3. NTP同期が有効にならない。 サーバーでNTPサービスが動作しているか確認してください。たとえば、systemd-timesyncdの場合、次を実行します:

    sudo systemctl start systemd-timesyncd
    

これが実際に必要な理由は?

  1. サーバー管理。 時刻と時刻ゾーンの設定は、ログの正しい動作、データ同期、タスクスケジューリングのために重要です。
  2. 国際プロジェクト作業。 標準としてUTCを使用することで、異なるタイムゾーンのクライアントと作業する際の混乱を避けることができます。
  3. 面接と認定試験。 timedatectlや時間管理に関する質問は、システム管理者の職務の試験や面接でよく出題されます。

これで、Linuxでの時間管理が、あなたの締め切り管理のように:自信を持って、正確に、驚かされることなくできるようになります。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION