Featured image of post Windows Hiccup 小日常:處理時間同步服務的問題

Windows Hiccup 小日常:處理時間同步服務的問題

這麼基本的服務居然不能自動啓動,我不確定這是Windows的Bug還是我後來不小心造成的問題。

不知出了什麼問題,我的電腦的時間從來不會自動和 NTP 伺服器同步,雖然短期內並不會對使用造成什麼影響,但倘若放任不管,時鐘的偏移量太多,則可能會造成 SSL 和 TOTP 等依賴時間戳的應用出現問題,再者,手動按同步鍵也很不方便,今天我決定必須要解決這個問題。

SpecialPollInterval

在網上搜尋一番之後,我發現有人提到SpecialPollInterval這個鍵值,其具體位置是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient,微軟官方文件對其的描述如下:

This entry specifies the special poll interval in seconds for manual peers. When the SpecialInterval 0x1 flag is enabled, W32Time uses this poll interval instead of a poll interval determine by the operating system. The default value on domain members is 3,600. The default value on stand-alone clients and servers is 604,800.

對於一般客户端,這個鍵值的預設值是604800,也就是一個星期同步一次,這個間隔顯然太久,於是我將其設定成了3600令其一小時同步一次。

w32tm

幾天後,當我再次檢查時間時,卻發現時間仍然沒有自動同步,這一次的偏移量已經達到了 15.8 秒。

系統時間快了15.8秒

於是查詢「SpecialPollInterval」想要知道其具體的作用和未及預期目的的原因,卻發現了微軟的一篇疑難解答。這篇疑難解答指出:「每次客户端輪詢時間樣本到 NTP 伺服器時,NTP 客户端都會進入 SPIKE 狀態。 時間服務管理其內部狀態,如果客户端進入 SPIKE 狀態,則客户端不會同步其時間。」

為了解決這個問題,需要將 Windows 時間配置為使用 MinPollInterval/MaxPollInterval 作為輪詢間隔。

1
w32tm /config /update /manualpeerlist:cn.pool.ntp.org /syncfromflags:MANUAL

服務尚未啓動

執行這一行配置時出現了「服務尚未啓動」的提示,這説明用於時間同步的服務根本沒有啓動。如此基礎的服務竟然不會自動開機啓動,我也不知道這是 Windows 的 Bug 還是我後期使用無意間製造的問題,不管怎樣,首先啓動這個服務:

1
2
net start w32time
w32tm /register   # 註冊一些基本的登錄檔鍵值和相關服務

隨後 Win + R 執行services.msc開啓服務管理面板,找到「Windows Time」服務,將其啓動型別設定為「自動」,即可讓其開機自動啓動。

將 W32Time 的啓動型別設定為自動 出現「下次同步」字樣即説明成功

再次重新啓動電腦,這次開啓「設定」–>「時間和語言」–>「日期和時間」–>「附加時鐘」,切換到「Internet 時間」選項卡,如果出現了「下次同步」的字樣,説明這套系統終於是正常運作了。