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 を使っているオペレーティングシステムに ntp
や ntpdate
をインストールしたい場合は、まず 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が削除されます。