コンピュータの時計は完璧ではありません。数日、数週間、数ヶ月のうちに、時刻がずれたり、実際の時刻を示さなくなったりします。10:30」と表示されていても、実際には「10:33」であったりする。古いコンピューターでは、定期的に手動で時計を調整するのが一般的だった。しかし、インターネット接続が一般的になってから、最新のOSはNTPサーバーの助けを借りて自動的に時計を調整するようになりました。

NTPとは?

NTPとは、Network Time Protocolの頭文字をとったものです。ネットワーク接続を通じてコンピュータの時計を同期させ、正確な時刻を保つためのアルゴリズムです。

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

幸運なことに、ほとんどのディストリビューションは、何らかの形で時間同期を実装しています。もし、コンピュータの時計が電話の時計とずれているのを見たことがなければ、ほぼ間違いなく NTP クライアント/デーモンがすでに動作しているはずです。

systemdを搭載したLinux OSの場合

Linuxディストリビューションの多くはsystemdを採用しており、systemdには “systemd-timesyncd “というデーモンが付属しています。つまり、Ubuntu, Debian, Fedora, Arch Linux, openSUSE, Manjaroなどでは、すでにNTPクライアントがプリインストールされていることになります。これらのディストロやそれをベースにしたもの(elementary OSやZorin OSなど)で、これを実行して、NTP同期が有効になっているかどうかを確認します。

timedatectl

出力に「Network time on: yes」と表示された場合、お使いのコンピュータの時計はNTPによって自動的に定期的に調整されています。NTP synchronized: no` と表示されたら、“systemd-timesyncd” 以外のツールで時計が同期されていることを意味します。また、systemd-timesyncd がまだ同期していないが、後で同期することを意味する場合もあります。

もし、Network time on: no と表示されたら、以下のコマンドを実行して NTP 時刻同期を有効にしてください。

sudo timedatectl set-ntp true (日本語)

これらのディストリビューションでは、これだけでよいです。

Systemd を使用しない Linux OS の場合

MX Linux は最も人気のある Linux ディストリビューションの一つなので、この OS に関する例から始めるのが適切でしょう。timedatectl はネットワーク時間が “on” であることを報告しますが、systemd-timesyncd は使われません。

どのように同期しているのでしょうか?次のコマンドで確認できます。これは他のどの Linux オペレーティングシステムでも使えます。

sudo cat /var/log/syslog | grep ntp

MX Linuxでは、次の図のような結果が得られます。

このフィルタリングされたログメッセージから、「ntpdate」クライアントが一度実行されたことが分かります。これは人気のあるクライアントで、多くのLinuxディストリビューションにデフォルトでインストールされています。軽量で、NTPサーバーに散発的に問い合わせるだけです。バックグラウンドでは動作せず、スクリプトによって起動され、同期された後、終了します。

この時刻は極めて高い精度(ミリ秒やマイクロ秒を考えてください)で同期されているわけではありませんが、ほとんどの目的には十分な精度を備えています。通常、少なくとも秒単位で正確です。

他のオペレーティングシステムでは、バックグラウンドで常に動作しているデーモンである「ntpd」を目にすることがありますが、これは非常に正確です。実行すればするほど、より正確になります。

何らかの理由で、systemd を使っているオペレーティングシステムに ntpntpdate をインストールしたい場合は、まず systemd の ntp クライアントを無効にしてください。

sudo timedatectl set-ntp false

もちろん、systemd 以外のディストロでは上記のコマンドは必要ありません。

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

これは、自宅のコンピュータやラップトップなど、常時インターネットに接続されていないデバイスに適しています。

Debian, Ubuntu, Linux Mint, Zorin やこれらをベースにしたディストロでは,以下のように実行します.

sudo apt インストール ntpdate

上記のDebianベースのディストリビューションでは、新しいネットワーク接続を確認した後に実行するように設定されています。ネットワークから切断して再接続すれば、今すぐ時刻の同期を強制することができます。

FedoraとUbuntuでは、ntpdateは非推奨のソフトウェアなので、代わりにntpdデーモン(下図)を使用することが推奨されます。他のすべてのディストロについても、2つの理由から、同じことが推奨されます。

  • ntpdateを別パッケージにせず、次項のntpdにバンドルしていることがある。
  • 彼らは、すべてのネットワーク接続で自動的に実行するためにntpdateを自動化しません。ネットワーク接続後に自動的に実行されるスクリプトに、自分でntpdateを挿入する必要があります。

この場合、次のセクションで指示されているようにntpdをインストールする方が理にかなっています。

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

Debian, Ubuntu, Zorin, Mint などの Debian, Ubuntu ベースのディストロでは,次のように実行します.

sudo apt install ntp

これらのディストロはすぐにntpdを起動し、起動のたびに自動的に起動します; これ以上の操作は必要ありません。

Fedoraでは、次のようにインストールします。

sudo dnf 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のデーモンサービスファイルの名前が異なる場合があります。

ntpd の監視

ntpdが起動していれば、内蔵のツールを使ってタイムサーバーの状態をチェックすることができます。例えば、以下のコマンドを実行すると、あなたのマシンが現在タイムサーバと通信しているかどうかを確認することができます。

ntpstat

また、現在のntpdインスタンスでアクティブなタイムサーバをポーリングすることもできます。これは、Linuxマシンの時間を同期しようとしているときに、使用できる最も信頼性の高いホストを確認する場合に便利です。タイムサーバーのポーリングを行うには、次のコマンドを実行します。

ntpq -p

最後に、ntpqはNTPデーモンと直接対話するために使用できるプロンプトでもあります。このプロンプトを使うには、ターミナルウィンドウで ntpq を実行します。

中に入ったら、?を入力すると、NTPデーモンで利用可能なすべてのコマンドがリストアップされます。例えば、以下のコマンドを実行すると、デーモンはLinuxマシンの時刻をNTP4に同期させるように強制します。

ntpversion 4

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

ntpdを実行する以外に、最新のタイムキーピングプロトコルとNTPのフロントエンドを使用することも可能です。Chrony はシンプルでモダンな NTP デーモンの実装です。

Chronyを使う最大の利点は、ローカルクロックが参照タイムサーバから何秒ずれたかを自動的に計算することです。そこから、デーモンはローカルの Linux の時間をオフセットして、この基準と常に同期するようにします。

この方法は、天気予報を監視するような、時間に敏感なタスクにマシンを使用する場合に便利でしょう。DebianとUbuntuにChronyをインストールするには、以下のコマンドを実行してください。

sudo apt install chrony

Arch Linux では、pacman を使ってインストールしてください。

sudo pacman -S chrony

Fedora では、dnf を使って Chrony をインストールしてください。

sudo dnf install chrony

Chronyをシステムに入れたら、以下のコマンドを実行して、リモートのタイムサーバをポーリングしていることを確認します。

chronyc ソース

その後、ログアウトするかマシンを再起動して、Linuxシステムの時刻がリモートタイムサーバと同期することを確認してください。

Frequently Asked Questions (よくある質問)

Chrony と ntpd を同じマシンにインストールすることはできますか?

いいえ。Chronyとntpdはどちらも同じサービスを提供するデーモンです。どちらのプログラムもローカルのLinuxの時間をタイムサーバーに同期させることを目的としています。しかし、Chronyとntpdはターゲットとするアプリケーションに違いがあります。

Chronyの開発者は、最新のLinuxハードウェアで動作するようにプログラムを設計したため、システムから多くのリソースを消費する機能が含まれています。ntpdはよりシンプルで、レガシーと小規模のハードウェアの両方で動作します。

タイムサーバーを混在させると、時計はより正確になりますか?

はい、そうです。いくつかのLinuxデスクトップは、システム時間を維持するために「プールタイムサーバー」を使用しています。これは、他のタイムサーバーから時間データを収集するサービスです。プールタイムサーバー」は、このデータを使用して、現在時刻の推定値を作成します。例えば、Ubuntuはデスクトップとサーバーの両方で「ubuntu.pool.ntp.org」をメインのタイムサーバーとして使用します。

SystemD を使っています。Chronyとntpdはtimesyncdとコンフリクトを起こしますか?

いいえ。デフォルトでは、SystemD の timesyncd は init システムのオプションモジュールにすぎません。SystemD のディストリビューションであっても、別の NTP デーモンを使用することが可能です。例えば、UbuntuやDebianにChronyをインストールすると、自動的にtimesyncdが削除されます。

画像引用:Unsplash. すべての改変とスクリーンショットはRamces Redによるものです。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。