Windows-Server-2008-R2

Apache 2.4 無法殺死,無法在 Windows Server 上停止

  • December 9, 2019

我們有兩台Windows Server,一台在2012 R2,另一台在2008 R2 ,它在代理/反向代理模式下使用Apache HTTP Server ( httpd) 2.4ProxyPass (使用和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無法殺死該程序,則無法重新啟動 Apache,因為埠 80 已經綁定。

好的,所以我認為我走在正確的軌道上。

在網上搜尋有關最近安裝的更新後,KB4338818是導致問題的原因之一。

其他軟體(如 FileZilla Server)也會發生這種情況,詳見此處

我剛剛解除安裝了這個安全更新,現在 Apache 可以正常啟動/停止了!

所以我希望微軟能在以後的更新中解決這個問題!

Microsoft 正在發布 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

引用自:https://serverfault.com/questions/922066