最近,我们的 Windows Server 2008 R2 服务器上出现了一些严重的时间同步问题。
我将其追溯到一些非常简单的事情:Windows 时间服务未启动!当时间服务未运行时,时间不可能通过 NTP 同步......
Windows 时间服务设置为“自动”启动在服务控制面板中,我反复检查了两次。我还检查了事件日志,没有看到任何服务故障或类似情况。事实上,在安装了每周的 Windows 更新并重新启动服务器后,Windows 时间服务似乎从未自动启动过。(这被设置为每周六晚上 7 点发生。)
我一启动时间服务,时间就同步正常了。
那么,问题是:为什么设置为“自动”启动的服务不会自动启动?这对我来说似乎有点疯狂。
答案1
如果 PC 不在域中,W32time 将不会自动启动。该死的微软!
尝试运行这个:
sc triggerinfo w32time start/networkon stop/networkoff
答案2
一个可能的解释是,此主题:
我的理解是,基本上,除非您或某个任务或某个硬件或网络启动事件来启动服务,否则服务不会启动。当您尝试更新时间时,您将调用服务并触发事件“启动 xyz 服务”。完成后,它还可以关闭服务。这非常简单。这是 seven 更快的原因之一,因为许多服务只在需要时运行,而不是一直运行,等待某些东西使用它们。实际上,您不必尝试决定需要或不需要哪些服务,它们可以自己处理。
他正在谈论 Windows 7 中的新内核。
由于 Windows Server 2008 R2 和 Windows 7 确实共享相同的内核,我想知道分辨率是否相同?
他们建议将服务设置为自动/延迟启动来修复这个问题。
我仍然坚持认为,设置为自动的服务无法启动简直是疯了...并且我不完全理解延迟自动启动和自动启动之间的语义区别,但如果它有效,我想我就不会抱怨。
答案3
不幸的是,有了 Windows 时间,您手动打开日志记录。
对于“什么原因导致服务无法自动启动”,没有好的答案。唯一真正的原因是依赖项未正确启动,或者服务启动时出现某种崩溃。如果没有日志,那么您的猜测和我们的一样糟糕。
我建议在接下来的几个补丁周期内启用 Windows 时间记录。如果服务启动,一切正常,如果没有,则需要做一些工作。
值得注意的是,我曾多次看到服务在修补程序后无缘无故地无法启动,但在第一次重启后却运行良好。
开始写评论,然后就没有空间了。
您实际上可以从该日志中获取一些信息。
如果根本没有日志,它甚至不会尝试启动。你可以从那里开始研究,每一点信息都有助于解决这类问题。
由于这是通过上述链接打开的调试日志,因此您应该获得某物如果它尝试启动。您至少可以更好地了解它为什么无法成功启动。
您发现了系统管理员面临的最大问题之一:您需要日志来告诉您从哪里开始查找,但服务尚未达到可以生成日志的程度。这是一个典型的先有鸡还是先有蛋的问题。
答案4
谢谢,我已经将一些未在 Windows Server 2016 上启动的服务设置为延迟,并且它起作用了,但是,我无法对防病毒服务执行此操作,因为它受到保护以防止修改。
但是,我发现这个解决方法很有效,即使它适用于 2008 R2:https://support.microsoft.com/en-us/help/922918/a-service-does-not-start-and-events-7000-and-7011-are-logged-in-windows-server-2003-windows-server-2008-and-windows-server-2008-r2
这可能将启动任何服务,而无需将它们设置为延迟启动。它对防病毒软件有效,这是肯定的。
我将把解决方法中最有用的部分粘贴在这里:
要解决此问题,请修改注册表以增加服务控制管理器的默认超时值。要将此值增加到 60 秒,请按照以下步骤操作:
Click Start, click Run, type regedit, and then click OK.
Locate and then click the following registry subkey:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
In the right pane, locate the ServicesPipeTimeout entry.
Note: If the ServicesPipeTimeout entry does not exist, you must create it. To do this, follow these steps:
On the Edit menu, point to New, and then click DWORD Value.
Type ServicesPipeTimeout, and then press ENTER.
Right-click ServicesPipeTimeout, and then click Modify.
Click Decimal, type 60000, and then click OK.
This value represents the time in milliseconds before a service times out.
Restart the computer.