我们有两个的Windows Server,一个在2012 R2和其他2008 R2,它使用Apache HTTP服务器(httpd
)2.4中的代理服务器/反向代理模式(的使用ProxyPass
,ProxyPassReverse
和虚拟主机配置)。这两台服务器均使用来自Apache Haus的Apache 2.4.27 x64二进制版本。
我们在两个服务器上都运行着一些备份脚本。他们停止所有服务(包括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.
因此,我测试了使用pskill
Sysinternals 杀死该进程:
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
无法终止该进程,则由于端口80已绑定,因此无法重新启动Apache。