เรามีสองWindows Serverหนึ่งใน2012 R2และอื่น ๆ ใน2008 R2ซึ่งใช้Apache HTTP Server ( httpd
) 2.4ในหนังสือมอบฉันทะ / โหมดย้อนกลับพร็อกซี่ (การใช้งานของProxyPass
, ProxyPassReverse
และโฮสต์เสมือนการตั้งค่า) เซิร์ฟเวอร์ทั้งสองใช้Apache buildแบบไบนารี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.
ดังนั้นฉันทดสอบเพื่อฆ่ากระบวนการด้วย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 ถูกผูกไว้แล้ว