Windows 7の時刻同期間隔をregeditせずに短くしたい

初期状態のWindows 7では時刻同期は毎週日曜日に実行されるようになっています。これだと分オーダーで時刻がずれていることがあるので、同期間隔を短くしたいと思ったのですが、(たぶん)Windows 7から仕組みが変わったようです。

  • Windows 7まで(?)
    OS起動時にWindows Time (W32Time)が自動で起動されて常駐する。同期間隔はレジストリに最大値と最小値などが設定されていて、同期先NTPサーバーとの時刻のずれにより、この最大値、最小値の範囲内で同期間隔が調整される。(設定により固定の間隔にすることも可能。)
    つまり、W32Timeが常駐してW32Timeの仕組みで同期間隔を調整しながら時刻同期を行う。
  • Windows 7以降(?)
    Windows Time (W32Time)のスタートアップは手動に設定されており、OS起動時には起動されない。
    タスクスケジューラのSynchronizeTimeが一週間ごとにW32Timeを起動し、W32Timeが時刻同期を行う。時刻同期を行った後W32Timeは終了する。
    つまり、W32Timeは常駐せずに時刻同期を行うだけで終了し、同期間隔はSynchronizeTimeが管理する。

Windows 7を使っていて同期間隔を短くしたいと考える人が多いようで、ネット上にはWindows 7より前と同じように、OS起動時にW32Timeが自動で起動されて常駐するようにし、レジストリをいじって同期最大間隔や最小間隔などを設定して以前と同様の動きにする方法がよく見つかります。

でも、レジストリをいじるのは不安だし、そんなに厳密に時刻があって無くてもいい、でも分オーダーでずれるのはさすがにいやだ、という人が多いのではないかと思います。そこでW32Timeは今まで同様手動起動のままで常駐せず、SynchronizeTimeがW32Timeを起動する間隔を短くすればよいのではと思って試してみました。以下自己責任で。

  1. タスクスケジューラ を開く
    [コントロールパネル/システムとセキュリティ/管理ツール]にある[タスクのスケジュール]を開く。
  2. Time Synchronization を開く
    タスクスケジューラの左ツリーの [タスク スケジューラ ライブラリ/Microsoft/Windows/Time Synchronization]を開く。
  3. SynchronizeTimeのプロパティを開く
    タスクスケジューラ中上のリストから、SynchronizeTime(これしかないと思う)を選択し、タスクスケジューラ右下の プロパティ をクリック。
  4. トリガーの編集を開く。
    SynchronizeTimeのプロパティでトリガータブを選択し、トリガー一覧から[毎週]を選択(これしかないと思う)して[編集]ボタンをクリック。
    sunday
  5. トリガーを編集
    [タスクの開始]を、[スタートアップ時]に変更し、詳細設定を下記のように設定する。

    • 遅延時間を指定する:無しにする(チェックをはずす)と起動後停止されるようなので1分間遅延するようにしました。
    • 繰り返し間隔, 継続時間: お好みで。私の場合は24時間動かすマシンではないので、1日間の間、1時間ごとのトリガーにしました。

    startup

  6. あとは、[OK], [OK], [×] でタスクスケジューラーを閉じる。
  7. マシンを再起動し、イベントビューアー([コントロールパネル/システムとセキュリティ/管理ツール]の[イベント ログの表示])で、[Windows ログ/システム]を開き、マシン起動後1分あまりで
    • ソース:Service Control Manager, イベント ID:7036, Windows Time サービスは 実行中 状態に移行しました。
    • ソース:Time-Service, イベント ID:37, タイム プロバイダー NtpClientは現在 … から有効な時間データを受信しています。
    • ソース:Time-Service, イベント ID:35, システム時刻とタイム ソース … の同期をとっています。
    • ソース:Kernel-General, イベント ID:1, システム時間は… から … に変更されました。
    • ソース:Service Control Manager, イベント ID:7036, Windows Time サービスは 停止 状態に移行しました。

    の五つが記録されており、その後約1時間毎にこの五つのイベントが記録されていればうまく動いていると思います。

コメント

  1. 吉田さま
    コメントありがとうございます。
    教えていただいたリンク先を見させていただきました。リンク先では
    「Windows Time サービスのスタートアップの種類を [手動] から [自動] に変更しても、システムを起動すると、Windows Time サービスは起動直後に停止して、」
    の場合だと理解しました。

    私が投稿した方法は、スタートアップの種類は[手動]のままで、もともとの設定のトリガ間隔を短くしただけだと思っています。
    レジストリを変更して常駐させる方法とはやっていることが違うのは理解していますが、投稿にも書いてますように、「レジストリをいじるのは不安だし、そんなに厳密に時刻があって無くてもいい、でも分オーダーでずれるのはさすがにいやだ」の時に、こんな方法でどうでしょうと投稿しました。

    教えていたいただいたリンク先は勉強になりました。ありがとうございました。

  2. 次にも載っています。
    freesoft.tvbok.com/tips/pc_windows/wintimecontrol.html
    スタートアップの種類 を ログオン時にしてみました。
    さらに見るとユーザーがログオンしているかにかかわらず実行と成っていました。
    最上位の特権で実行となっていますので、これでもいいのではないかと思っています。

  3. Windows 10 でもおよそこちらの情報で定期的な同期が出来ました。ありがとうございました。
    しかし私の環境では

    > イベントビューアー([コントロールパネル/システムとセキュリティ/管理ツール]の[イベント ログの表示])で、[Windows ログ/システム]を開き

    こちらのイベントビュワーによるイベントの確認は出来ませんでした。更新自体は「日付と時刻の設定」の最後の同期時刻を見るに行われていることが確認出来ました。

    これから参考にされる方の為にコメントさせて頂きます。

  4. ねこ丸さま
    情報ありがとうございます。(遅いお礼ですみません。)
    教えていただいたページは、(2014/06)となっているので、本投稿(2014年3月3日)より後に書かれた記事ですね。
    本投稿より初心者に優しく書かれていますし、教えていただいた記事が先にあればきっと本投稿はしなかったでしょう。:-)

    ありがとうございました。

  5. shさま
    Win10での情報、ありがとうございます。

    詳細は省きますが私は現在Win10では、
    [タスク スケジューラ ライブラリ/Microsoft/Windows/Time Synchronization]に、「PeriodicSynchronizeTime」という新しいタスクを作成し、[操作]に
    – プログラムの開始 %windir%\System32\sc.exe start w32time task_started
    – プログラムの開始 %windir%\System32\w32tm.exe /resync
    の二操作を作成、そのほかのタブはそれなりに設定して動かしています。

    この状態で、イベントビューアには上記のログが記録されていました。

    逆に教えていただいた
    > 更新自体は「日付と時刻の設定」の最後の同期時刻を見るに行われていることが確認出来ました。
    は、「日付と時刻の設定」に「最後の同期時刻」という表示項目があるのかと理解したのですが、その項目自体を見つけることができませんでした。

    Win7->10かWin10クリーンインストールか、とか何か環境に違いがあるのかもしれませんね。

    ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA