タイムゾーンと時間の管理: コマンド timedatectl
1. Linuxでの時間管理
なぜ時間の設定を正しくすることが重要なのか?
例えば、システムログでエラーを追跡しようとしているのに、ログの時間が実際の時間と一致していないとしたらどうしよう? さらに悪いことに、国際的な会社のサーバーがユーザーごとに異なる時間を表示しているとしたら。それを防ぐために、時間の正しい設定はただの便利さではなく、システムの作業、ファイルの同期、セキュリティの維持(SSL証明書は時間に依存する)や作業タスクの調整にとって至関重要なんだよ。
Linuxでは時間は2つの形式で存在するよ:
- システム時間 (System Time) — OSがそのタスクに使用する時間。
- ハードウェア時間 (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
実践課題
- サーバーの現在のタイムゾーンを見つける。
- タイムゾーンをUTCに変更する。
- タイムゾーンを元のローカルに戻す。
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 serviceがinactive
を表示している場合)、これを有効にしてね:
sudo timedatectl set-ntp true
NTPを無効にしたい場合は、以下を実行してね:
sudo timedatectl set-ntp false
NTPが動作しない場合は、関連するサービスがアクティブであることを確認してね。例えば、systemd-timesyncd
を使っているシステムでは、サービスがアクティブであることを確認しよう:
sudo systemctl status systemd-timesyncd
5. 実践練習
課題
- システムのタイムゾーンをUTCに設定してください。
- システム時間を手動で2023年11月1日12:00:00に設定してください。
- NTPでの時間同期を有効にしてください。
確認
課題を完了した後、以下を確認してください:
- システム時間が設定したパラメータと一致している。
- タイムゾーンがUTCに変更されている。
- NTPサービスが有効になっている。
6. よくある間違いと注意点
"RTC in local TZ: no"がローカルな時刻ゾーンに一致しない。 多くのシステムでは、異なる時刻ゾーンでの混乱を避けるために、ハードウェア時刻にUTCを使用することを好みます。これはエラーではなく、ただの好みです。
時間変更時のアクセスエラー。
timedatectl
コマンドはスーパーユーザ権限を必要とします。sudo
を使用していることを確認してください。NTP同期が有効にならない。 サーバーでNTPサービスが動作しているか確認してください。たとえば、
systemd-timesyncd
の場合、次を実行します:sudo systemctl start systemd-timesyncd
これが実際に必要な理由は?
- サーバー管理。 時刻と時刻ゾーンの設定は、ログの正しい動作、データ同期、タスクスケジューリングのために重要です。
- 国際プロジェクト作業。 標準としてUTCを使用することで、異なるタイムゾーンのクライアントと作業する際の混乱を避けることができます。
- 面接と認定試験。
timedatectl
や時間管理に関する質問は、システム管理者の職務の試験や面接でよく出題されます。
これで、Linuxでの時間管理が、あなたの締め切り管理のように:自信を持って、正確に、驚かされることなくできるようになります。
GO TO FULL VERSION