Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxの時刻をNTPサーバーと同期する方法【systemd対応・非対応両方を解説】

Linuxの時刻をNTPサーバーと同期する方法【systemd対応・非対応両方を解説】

パソコンの内蔵時計は完璧ではありません。数日、数週間、あるいは数か月が経つと時刻が徐々にずれ込み、実際の時間を正しく表示しなくなります。たとえば、実際には「10時33分」なのに「10時30分」と表示されるといった具合です。昔のパソコンでは、定期的に手動で時計を合わせるのが一般的でした。しかし、インターネット接続が普及して以降、現代のOSはNTPサーバーの助けを借りて時計を自動的に調整するようになりました。

NTPとは?

NTPは「Network Time Protocol(ネットワーク・タイム・プロトコル)」の略称です。ネットワーク接続を通じてコンピューターの時計を同期させ、常に正確な時刻を保つために設計されたプロトコルです。

Linuxで時刻同期を有効にする方法

幸いなことに、ほとんどのLinuxディストリビューションには、何らかの形の時刻同期機能が最初から搭載されています。スマートフォンの時計とパソコンの時計がずれたことに気づいたことがないなら、すでにNTPクライアント/デーモンが動作している可能性が非常に高いといえます。

systemdを採用しているLinuxの場合

大多数のLinuxディストリビューションはsystemdを採用しており、それに伴って「systemd-timesyncd」デーモンも含まれています。つまり、Ubuntu、Debian、Fedora、Arch Linux、openSUSE、Manjaroなどには、NTPクライアントがあらかじめインストール済みです。これらのディストリビューションやその派生(elementary OS、Zorin OSなど)では、以下のコマンドでNTP同期の状態を確認できます。

timedatectl

Linuxの時刻をNTPサーバーと同期する方法【systemd対応・非対応両方を解説】

出力に Network time on: yes と表示されていれば、パソコンの時計はNTP経由で自動的に調整されています。ときどき NTP synchronized: no と表示されることもあります。これは「systemd-timesyncd」以外のツールで時刻が同期されていることを意味する場合もあれば、systemd-timesyncdがまだ同期処理を行っておらず、後ほど同期するという意味の場合もあります。

Network time on: no と表示された場合は、次のコマンドを実行してNTPによる時刻同期を有効にしましょう。

sudo timedatectl set-ntp true

これらのディストリビューションでは、これだけで設定完了です。

systemd非採用のLinuxの場合

近年MX Linuxが人気を集めているため、まずこのOSを例に挙げてみます。MX Linuxは特殊なケースで、「一応」systemdを持っているようでいて、実質的には使っていません。timedatectlではネットワーク時刻が「オン」と報告されるものの、systemd-timesyncdは利用されていません。

では、どのように同期しているのでしょうか? 次のコマンドで確認できます。このコマンドは他のLinux OSでも共通して使えます。

sudo cat /var/log/syslog | grep ntp

MX Linuxでは、下の画像のような結果が得られます。

Linuxの時刻をNTPサーバーと同期する方法【systemd対応・非対応両方を解説】

フィルタリングされたログから、「ntpdate」クライアントが一度実行されたことがわかります。これは多くのLinuxディストリビューションにデフォルトで導入されている軽量なクライアントで、NTPサーバーに対して断続的に問い合わせるだけの仕組みです。バックグラウンドで常駐せず、スクリプトによって起動され、同期が完了すると終了します。

つまり、ミリ秒やマイクロ秒レベルの超高精度な同期は行えませんが、ほとんどの用途には十分な精度です。通常は少なくとも秒単位では正確に保たれます。

一方、他のOSでは「ntpd」が使われている場合があります。ntpdはバックグラウンドで常駐するデーモンで、非常に高精度です。稼働時間が長いほど精度が向上していきます。

何らかの理由で、systemd採用のOSに ntpntpdate をインストールしたい場合は、まずsystemd側のNTPクライアントを無効にしておきましょう。

sudo timedatectl set-ntp false

もちろん、systemd非採用のディストリビューションでは上記コマンドは不要です。

ntpdateクライアントのインストール

ntpdateは、常時インターネットに接続していない家庭用パソコンやノートパソコンなどのデバイスに向いています。

Debian、Ubuntu、Linux Mint、Zorin、およびこれらをベースとしたディストリビューションでは、次のコマンドを実行します。

sudo apt install ntpdate

上記のDebian系ディストリビューションでは、新しいネットワーク接続を検出すると自動的に実行されるよう初期設定されています。今すぐ時刻同期を強制したい場合は、ネットワークから一度切断して再接続すればOKです。

Fedoraではntpdateは廃止予定のため、代わりにntpdデーモンの使用が推奨されます(次のセクション参照)。他のディストリビューションでもntpdの使用が推奨される理由は主に2つあります。

  • ntpdateが別パッケージとして用意されておらず、ntpdにバンドルされていることがある。
  • ネットワーク接続のたびにntpdateを自動実行する仕組みがなく、自分でネットワーク接続後に走るスクリプトへ組み込む必要がある。

こうした場合は、次のセクションの手順に従ってntpdをインストールする方が合理的です。

ntpdデーモンのインストール

Debian、Ubuntu、Zorin、Mint、およびDebian系・Ubuntu系の各ディストリビューションでは、次のコマンドを実行します。

sudo apt install ntp

これらのディストリビューションでは、ntpdが即座に起動し、以後の起動時にも自動的に立ち上がります。追加の作業は不要です。

Fedoraでは:

sudo dnf install ntp

CentOSでは:

sudo yum install ntp

Arch Linuxでは:

sudo pacman -S ntp

openSUSEでは:

sudo zypper install ntp

インストール後、サービスをブート時に自動起動するよう有効化し、起動します。

sudo systemctl enable ntpd
sudo systemctl start ntpd

systemdなしで動作するその他のディストリビューションでは、代わりに次のコマンドが必要になる場合があります。

sudo update-rc.d ntpd enable
sudo service ntpd start

または、お使いのOSで同等のコマンドを使用してください。

「ntpdが存在しない」というエラーが出た場合は、上記コマンドの「ntpd」を「ntp」に置き換えてみてください。ディストリビューションによっては、ntpdデーモンのサービスファイル名が異なることがあります。

まとめ

GUI(グラフィカルユーザーインターフェース)を備えたLinux OSでは、これらの手順を実行する必要があることはめったにありません。時刻同期はすでに設定済みであることがほとんどだからです。ただし、トラブルシューティングの際には本記事の手順が役立つはずです。多くのデスクトップ環境のコントロールパネルでは、時刻同期の有効/無効を切り替えられますが、内部ではここで紹介したのと似たコマンドが使われています。GUIツールがうまく動作しないときは、自分でコマンドを実行すれば解決できるでしょう。

  1. Linuxの「at」コマンドでタスクを予約実行する方法|インストールから応用テクニックまで

    初めてアクセスの多いサーバーを管理していた頃、ユーザーが誰もいない時間を見計らってサーバーを再起動する必要がありました。観察してみると、そのタイミングは深夜3時頃でした。「こんなに不便なことはない。再起動のためだけに夜中に起きるなんて…」と思ったのですが、5秒後にはすぐに気づきました。「これはLinuxだ。こんな単純な作業なら簡単に自動化できるはずだ」と。こうしてatコマンドとの出会いが訪れたのです。 atは非常に使いやすいユーティリティです。日付と時刻をコマンドライン引数として渡し、その後に実行したいコマンドを1つ以上入力するだけです。 サーバー環境では、無人での操作が必要になる場面が多い

  2. Windows 11で時刻を同期する3つの方法|設定・コントロールパネル・コマンドプロンプト

    Windowsでは、システムクロックの時刻をサーバーと正確に同期させておくことが非常に重要です。多くのサービスやバックグラウンド処理、さらにはMicrosoft Storeなどのアプリケーションも、正常に動作するためにシステム時刻に依存しています。時刻がずれていると、これらのアプリやシステムがエラーを起こしたり、クラッシュしたりする可能性があり、さまざまなエラーメッセージが表示されることもあります。 近年のマザーボードには、PCの電源が長時間切れていても時刻を保持できるよう、専用のバッテリー(CMOSバッテリー)が搭載されています。しかし、バッテリーの劣化やOS側の不具合など、さまざまな原因に