Apache 2.4 无法终止,无法在 Windows Server 上停止

Apache 2.4 无法终止,无法在 Windows Server 上停止

我们有两个Windows 服务器,其中一2012 R2另一个在2008 R2它使用Apache HTTP 服务器httpd2.4在代理/反向代理模式下(使用ProxyPassProxyPassReverse虚拟主机配置)。两个服务器都使用Apache 2.4.27 x64来自 Apache Haus 的二进制构建。

我们在两台服务器上都运行了一些备份脚本。它们会停止所有服务(包括 Apache),然后执行备份并重新启动所有服务。

这些脚本在几年(近 4 年)以来一直运行良好。但从 开始July 12, 2018,行为就变得奇怪了。备份脚本正在执行其工作,停止所有服务,进行备份,但现在,除 Apache 之外的所有服务都重新启动了。

经过调查,我发现 Apache 2.4.27 服务无法停止。当使用服务控制台并尝试手动停止该服务时,控制台显示“正在停止”,没有任何反应。

于是我检查了正在运行的进程,发现有一个httpd.exe进程正在运行。我试图终止该进程,但没有成功。

因此,我尝试了:

taskkill /im "httpd.exe" /f /t

输出为:

ERROR: The process with PID 560 (child process of PID 480) could not be terminated.
Reason: There is no running instance of the task.

因此我测试使用 Sysinternals 来终止该进程pskill

pskill -t 560

输出为:

Copyright (C) 1999-2016  Mark Russinovich
Sysinternals - www.sysinternals.com

Process 5956 killed.

但这是错误的,因为该httpd过程一直在运行!

所以我把 Apache 从 2.4.27 更新到了 2.4.34,但问题仍然存在。要解决这个问题,唯一能做的就是重启整个服务器。

我检查了已安装的更新,其中一些是July 11, 2018在前一天安装​​的:

  • KB4338420
  • KB4338818
  • KB4339093
  • KB4338423

所以我推测问题出在这些更新之一。所以在卸载所有更新之前,有没有人和我遇到同样的问题,我的意思是Apache 2.4 变得无法杀死并且无法在 Windows Server 上停止?

最大的问题是,如果httpd无法终止该进程,则 Apache 无法重新启动,因为端口 80 已被绑定。

答案1

好的,我认为我的思路是对的。

在网上搜索最近安装的更新后,KB4338818是造成问题的原因。

其他软件也出现了这种情况,比如 FileZilla Server,详细信息

我刚刚卸载了此安全更新,现在 Apache 可以正常启动/停止!

所以我希望微软能在以后的更新中修复这个问题!

答案2

微软发布 KB4345459 来修复 Windows 7 和 Windows 2008 Server 中的问题。

https://support.microsoft.com/en-us/help/4345459/stop-error-0xd1-after-a-race-condition-occurs-in-windows-7-service-pac

答案3

似乎微软正在开始修复该问题,到目前为止仅针对 Server 2016 和 Windows 10: https://support.microsoft.com/de-de/help/4345421/windows-10-update-kb4345421

答案4

我认为你肯定走在正确的轨道上。我在 Windows Server 上遇到了类似的 Tomcat 问题。但是,我还有另一台安装了 Tomcat 的服务器,它没有遇到这个问题,我能找到的唯一主要区别是工作服务器也安装了 IIS 并在其他端口上运行。作为一种解决方法,我尝试在问题服务器上加载 IIS,设置默认网站,以便它使用非标准端口,问题似乎已经消失,而无需卸载更新。

相关内容