Apache 2.4 無法殺死,無法在 Windows Server 上停止
我們有兩台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 中的問題。