![Apache 无法重新启动 - httpd 已死但子系统已锁定](https://linux22.com/image/520926/Apache%20%E6%97%A0%E6%B3%95%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%20-%20httpd%20%E5%B7%B2%E6%AD%BB%E4%BD%86%E5%AD%90%E7%B3%BB%E7%BB%9F%E5%B7%B2%E9%94%81%E5%AE%9A.png)
我希望有人能紧急帮助我。
我一直在尝试让我的 Centos 服务器恢复运行。
我昨天按计划进行了 yum 更新,但是今天早上我发现 httpd 已死(我猜是 logrotate 的问题)。
我可以发出“service httpd start”,它似乎可以正常启动,但状态显示“httpd 已死但子系统已锁定”。
我可以删除子系统锁定并重新启动,但随后我收到:
“(98)地址已在使用中:make_sock:无法绑定到地址 0.0.0.0:80
没有可用的监听套接字,正在关闭
无法打开日志”
然后运行 netstat -plant 显示 httpd 正在运行
tcp 0 0 0.0.0.0:80 0.0.0.0:* 监听 8191/httpd
tcp 0 0 0.0.0.0:443 0.0.0.0:* 监听 8191/httpd
我可以从我的 httpd.conf 中删除 Listen 80,这样可以消除第一个错误,但随后它会显示:“(98) 地址已在使用中:make_sock:无法绑定到地址 0.0.0.0:443
没有可用的监听套接字,正在关闭
无法打开日志”
我的配置文件中没有 443 的条目?
运行 tail -f /var/log/messages 后,我收到一个令人担忧的条目:
www kernel: httpd[8189]: segfault at 0 ip b7367c48 sp bf89f4fc error 4 in libc-2.5.so[b72f8000+152000]
请问有什么想法吗?
你的,克里斯
答案1
您可能仍有 httpd 在端口 80 和 443 上运行。尝试 pkill httpd;或 pkill -9 httpd
然后再次运行 netstat -plant 并检查端口 80 和 443 上的 httpd 是否消失。
现在再次启动 apache。
您说您的配置中没有 443,那么“grep -ril 443”/etc/apache2 说了什么?
答案2
您还可以使用 lsof -i tcp:443 检查是否有任何进程绑定到 443;然后您可以终止该进程或找到有问题的服务。
答案3
我也遇到过类似的事情。原来 httpd 确实一直在运行!显然,如果您在检查服务状态时权限不足,则“httpd 已死但子系统已锁定”消息可能会产生误导。切换到 root 并查看是否收到不同的消息,或者 ping 您的服务器,您可能会发现它正在运行!
答案4
可能还有另一个 httpd 实例正在运行,请执行
`lsof -i :80`
并且应该显示它是否正在运行。如果它正在运行,请执行以下操作
kill -9 <pid>
此外,您可能需要检查 /etc/httpd/httpd.conf 文件中是否存在错误,因为这可能会导致服务启动错误