何が問題なのか分かりませんが、私のコンピュータの時間は決してNTPサーバーと自動的に同期されません。短期的には使用に大きな影響はありませんが、放置しておくと時計のずれが大きくなり、SSLやTOTPなどのタイムスタンプに依存するアプリケーションに問題を引き起こす可能性があります。また、手動で同期ボタンを押すのも非常に不便です。今日はこの問題を解決することに決めました。
SpecialPollInterval
ネットで検索したところ、SpecialPollInterval
というレジストリキーがあることがわかりました。具体的な位置はHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
です。Microsoftの公式ドキュメントでは次のように説明されています:
このエントリは、手動のピアのための特別なポーリング間隔を秒単位で指定します。SpecialInterval 0x1 フラグが有効になっている場合、W32Timeはオペレーティングシステムによって決定されたポーリング間隔の代わりにこのポーリング間隔を使用します。ドメインメンバーのデフォルト値は3,600秒です。スタンドアロンのクライアントおよびサーバーのデフォルト値は604,800秒です。
一般的なクライアントの場合、このキーのデフォルト値は604800
、つまり1週間に1回の同期です。この間隔は明らかに長すぎるので、私はこれを3600
に設定し、1時間ごとに同期することにしました。
w32tm
数日後、再度時間を確認したところ、時間はまだ自動的に同期されておらず、今回は15.8秒のずれがありました。
そこで「SpecialPollInterval」の具体的な役割と期待した結果が得られなかった理由を調べたところ、Microsoftのトラブルシューティングガイドにたどり着きました。このトラブルシューティングガイドでは、「クライアントがNTPサーバーに時間サンプルをポーリングするたびに、NTPクライアントはSPIKE状態に入ります。時間サービスは内部状態を管理しており、クライアントがSPIKE状態に入ると、クライアントは時間を同期しません。」と指摘しています。
この問題を解決するためには、Windows時間をMinPollInterval/MaxPollIntervalを使用してポーリング間隔を設定する必要があります。
|
|
サービスが起動していない
この設定を実行すると「サービスが起動していない」というメッセージが表示されました。これは、時間同期に使用されるサービスがまったく起動していないことを意味します。このような基本的なサービスが自動的に起動しないとは、これはWindowsのバグなのか、私が後に無意識に作った問題なのか分かりませんが、とにかくまずこのサービスを起動します:
|
|
その後、Win + Rでservices.msc
を実行してサービス管理パネルを開き、「Windows Time」サービスを見つけ、その起動タイプを「自動」に設定すれば、次回の起動時に自動的に起動します。
再度コンピュータを再起動し、「設定」→「時間と言語」→「日付と時刻」→「追加の時計」に移動し、「インターネット時間」タブに切り替えます。「次回同期」の文字が表示された場合、このシステムはついに正常に動作していることを示しています。