Windows Server 上 NTP 的故意时间偏差(2016)

Windows Server 上 NTP 的故意时间偏差(2016)

由于界面写得不好,我需要确保服务器 A 总是比服务器 B 快几秒钟。(是的,我知道这是一件可怕的事情)到目前为止,我有三个广泛的解决方案:

  1. (首选)改变 W32Time,在进行时间 NTP 同步时将时钟提前 X 秒。

  2. 安装不同的(修改过的?)NTP 时间服务(我看到 Windows 中提到了 Meinberg)但不想如此大幅度地更改服务器。

  3. (最黑客的)与 W32Time 事件日志绑定的计划任务。这意味着每次 Win32Time 设置时钟时,都会运行一个脚本来扭曲它(呸)。我在这里停下来,因为 MS 所说的 Windows 2016 上服务的日志不存在。我从 MS 支持那里看到的只是如何检查您的服务器版本,因为它“必须在那里”

更新:好吧,我可能是新来的,但我是 StackOverflow 的长期用户,声誉很高。
如果你投票反对我,那没关系,但我想知道原因,这样我就可以调整。

我想不出还有什么办法可以使它更加精确。

答案1

好吧,我很高兴我让供应商明白了道理并修复了他们的界面(足够了)。由于我讨厌留下未解决的问题,所以有一个简单的解决方案,如果你不幸需要这样做:

  1. 将 w32time 设置为手动(而不是自动)
  2. 创建一个计划任务来同步时钟,并在下一行调整时间

如果您在域中,则可能使用域控制器(自动)作为时间源。因此,您需要向域询问时间服务器,以便能够将其放入对 w32time 的调用中。

对于本文的其余部分,example.com 是域,time.example.com 是时间服务器。

获取典型域的时间服务器(例如.com):

nltest /dsgetdc:example.com

获取“DC: ...”值。它将是你的时间服务器。

将时间同步设置为手动 运行此命令:

w32tm /config /syncfromflags:manual /reliable:YES /update

然后重新启动“Windows Time”服务。

获取时间偏差 w32tm /stripchart /computer:time.exaample.com /samples:3 /dataonly

取第二列的数据,并计算三个数字的平均值。这就是服务器相对于时间源的领先或落后程度。

使用 powershell 将时间添加到当前时钟

设置日期-日期(获取日期).添加秒数(1.03)

注意:这将比示例中的“1.03”多添加几毫秒。您可以多次调用它来测量增加了多少毫秒,并将其构建到计算函数调用值的方式中。根据您需要的精确度,您可能需要在设置后再次检查时间偏差。

将时钟同步重新设置为自动 运行此命令:

w32tm /config /syncfromflags:domhier /update

然后重新启动“Windows Time”服务。

综上所述

  1. 将 Windows 时间 (W32tm) 同步设置为手动
  2. 创建计划任务,定期调用脚本手动同步时间。

脚本步骤

这假设您需要让本地时钟 X 比另一台服务器的时钟早(/晚)一段时间。如果您只需要它与时间服务器有偏差,则可以简化此脚本。

  1. 如果需要,确定时间源
  2. 同步时钟
  3. 测量本地时钟的时间偏差
  4. 检查服务器是否已经足够领先/落后于其他服务器的时钟:
    1. 使用远程 powershell 执行命令来测量时间偏差
    2. 比较本地和远程服务器的时间偏差,以了解服务器当前领先多少。
  5. 如果确定服务器时间需要调整:
    1. 同步本地时钟
    2. 运行命令检查时间偏差
    3. 将实际倾斜与所需倾斜进行比较
    4. 如果需要,运行命令将 X.yyyy 秒数添加到本地时钟。

相关内容