我们有两个Windows 服务器,其中一2012 R2另一个在2008 R2它使用Apache HTTP 服务器(httpd
)2.4在代理/反向代理模式下(使用ProxyPass
和ProxyPassReverse
虚拟主机配置)。两个服务器都使用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 中的问题。
答案3
似乎微软正在开始修复该问题,到目前为止仅针对 Server 2016 和 Windows 10: https://support.microsoft.com/de-de/help/4345421/windows-10-update-kb4345421
答案4
我认为你肯定走在正确的轨道上。我在 Windows Server 上遇到了类似的 Tomcat 问题。但是,我还有另一台安装了 Tomcat 的服务器,它没有遇到这个问题,我能找到的唯一主要区别是工作服务器也安装了 IIS 并在其他端口上运行。作为一种解决方法,我尝试在问题服务器上加载 IIS,设置默认网站,以便它使用非标准端口,问题似乎已经消失,而无需卸载更新。