メニュー 閉じる

日: 2014年2月11日

Windowsで「インターネット時刻」を設定しても、ぜんぜん時間が合わない問題の回避策

image
せっかくWindows自身が持っているWindows Timeで時間を合わせたいところですが、それだとなぜか1週間に1回しか時計が合わない設定になっているとのこと。
おなじみのこの画面で設定し、今すぐ同期…しただけではダメなようです。

タスクスケジューラを起動して、[タスクスケジューラライブラリ] – [Microsoft] – [Windows]-  [Time Synchronization] 配下にある Synchronize Time を選択します。
すると、通常ここに設定があるのですが、1週間に1回ではPCの時計はかなりずれます。

というわけで、そんなの無効にして10分間隔ぐらいで合わせたい、というときにどうすればいいのか。
画面右下から「日付と時刻の調整」というのを開くと、「インターネット時刻」というのがあるんですが(最初の画像)、Windowsを再起動するとなぜか時刻が合いません。

原因はこれのようです。

Microsoftサポート: Windows 7 および Windows Server 2008 R2 のスタンドアロン環境で Windows Time サービスが自動的に起動しない
http://support.microsoft.com/kb/2385818/ja

レジストリで10分間隔に設定しても、ドメインに入ってないPCは、Windows Timeサービスが正常に起動しないため、デフォルト設定では(実質的に)時計を正確にはあわせられない状態になっているわけです。

この情報から、回避策は下記の手順で良いでしょう。

(1)タスクスケジューラを起動して、[タスクスケジューラライブラリ] – [Microsoft] – [Windows]- [Time Synchronization] 配下にある Synchronize Time を選択します。
これを無効にします。

(2)コマンドプロンプトを右クリックして、管理者として実行します。
以下のコマンドで、トリガー開始を削除します。

sc triggerinfo w32time delete

(3)レジストリエディタ「regedit」を起動してポーリング間隔を設定します。

HKEY_LOCAL_MACHINESystem_CurrentControlSetServicesW32TimeTimeProvidersNtpClient SpecialPollInterval
HKEY_LOCAL_MACHINESystem_CurrentControlSetServicesW32TimeConfig UpdateInterval
について、
10分なら10進数で600(秒)に変更する。
1時間なら60*60=3600(秒)。

(4)日付と時刻の設定を開き、「インターネット時刻」を選択します。
「設定の変更」から、NTPサーバのアドレスかIPアドレスを入力、「今すぐ更新」を何度か押して時刻を合わせ、OKを押します。

(5)サービスを開き、Windows Timeサービスの設定を開きます。
サービスの開始が「自動」になっていることを確認します。「手動」になっていれば「自動」にします。

(6)Windowsを再起動して、インターネット時刻の設定を再度確認します。
「Windows Timeサービスが起動していない云々」の表示がなく、「時計は正常に~と同期しています」と表示されればOKです。
「スケジュールに従って~云々」と表示されるときは、タスクスケジューラの設定から再確認しましょう。
念のためサービスを開き、再起動後もWindows Timeサービスが開始していて、自動起動になっていることを確認します。

これで時刻同期を任意にコントロールできるようになりますね。
Windows8/8.1や、Windows Serverでも同様なので、やはりscコマンドとレジストリ設定で同じように設定しましょう。

やれやれですね。

※注意!
同期間隔を短くするとサーバーにそれだけ負荷がかかりますので、短くするときは相手先に迷惑をかけないように、ISPなどで用意されているNTPサーバなどを利用するようにしましょう。

自分と同じ設定で、数億台のPCが10分間隔で1つのNTPサーバにアクセスする、というような状況を考えてみてください。どれだけ迷惑か分かります。
できれば遠くのサーバよりも近いサーバのほうが良いに越したことはありませんので、同期先の設定はよく検討してくださいね。