我在 Windows Server 2016 + APC Smart UPS + NUT 上测试了电源故障时的 UPS 关闭情况。
一会儿,NUT 向 Windows 发送了关机命令。但我没有看到真正的关机,而是看到屏幕上显示“准备好你的服务器“或类似的东西,我不记得具体了。屏幕看起来像是在关机过程中安装一些更新。但服务器已配置为手动的更新。我在此之前的几个小时已经检查并安装了所有更新。
关机过程需要 20-25 分钟才能完成。幸运的是,UPS 没有关闭电源(由于某些配置错误)。但在实际情况下,如果配置正确,UPS 会在关机命令发出后 3 分钟内从服务器切断交流电源。
后来我查看了日志,发现 CBS(基于组件的服务)在关机前几分钟就开始了一些维护任务。所以 Windows 等待它完成。
大致时间:
15:36:55 shutdown command with 30 sec delay (shutdown.exe /f /s /t 30)
15:37:25 user logoff
about 15:55 shutdown has completed
来自CBS.log:
2019-05-08 15:34:59, Info CBS Maint: begin deep clean
...
...
2019-05-08 15:37:26, Info CBS Trusted Installer signaled for shutdown, going to exit.
2019-05-08 15:37:26, Info CBS A system shutdown was initiated while idle scavenging was running
2019-05-08 15:37:26, Info CBS Shtd: Prepare for shutdown processing.
2019-05-08 15:37:26, Info CBS Plan: Package: Package_for_RollupFix~31bf3856ad364e35~amd64~~14393.2273.1.4, Update: 4103720-19196_neutral_PACKAGE, current: Absent, pending: Default, start: Absent, applicable: Absent, targeted: Absent, limit: Absent, selected: Default
2019-05-08 15:37:26, Info CBS SetProgressMessage: progressMessageStage: 0, ExecuteState: ExecuteStateNone, SubStage: 0
2019-05-08 15:37:26, Info CBS Shtd: PreshutdownTimeout: 3600000ms, BlockTimeIncrement: 900000ms
2019-05-08 15:37:26, Info CBS Shtd: progress thread started
在我看来,任何进程都可能影响关机,这似乎是一个问题。尤其是当服务器必须尽快关闭时。
问题:
- 这是 WinServer2016 独有的行为吗?WinServer2012R2 又如何呢?
- 是否可以进行强制但正确的关机来覆盖这些繁忙的进程?