为什么 apache 无法启动并且错误日志中只显示“配置失败”?

为什么 apache 无法启动并且错误日志中只显示“配置失败”?

Apache 2.2.23 无法启动,日志文件中唯一的条目是:

[Fri Feb 22 02:54:24 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Feb 22 02:54:24 2013] [notice] Digest: generating secret for digest authentication ...
[Fri Feb 22 02:54:24 2013] [notice] Digest: done
Configuration Failed
[Fri Feb 22 02:54:57 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Feb 22 02:54:57 2013] [notice] Digest: generating secret for digest authentication ...
[Fri Feb 22 02:54:57 2013] [notice] Digest: done
Configuration Failed

这让我抓狂不已。网络正常,磁盘正常,配置文件通过语法检查,自上次运行以来没有发生任何变化。它就是拒绝启动,通常是在负载激增之后。

我还要提到,重启机制包括,如果正常关机不成功,则执行 kill -9。

我在 Google 上或这里找不到任何有关此内容的信息。

答案1

我最终找到了解决方案,即删除所有站点配置、模块和配置指令。

然后,最终,错误日志产生了这个精华:

[Fri Feb 22 03:04:22 2013] [emerg] (28)No space left on device: Couldn't create accept lock (/etc/httpd/logs/accept.lock.10752) (5)
[Fri Feb 22 03:04:24 2013] [warn] pid file /etc/httpd/run/httpd.pid overwritten -- Unclean shutdown of previous Apache run?

现在,谷歌上有答案。如上所述这里和其他地方一样,这个错误是由于 apache 打开了太多信号量而导致的,因为磁盘是空的而且可写入。

我通过运行解决了这个问题:

ipcs -s | grep www-data | awk '{print $2;}' | while read -r line; do ipcrm sem "$line"; done

并将其添加到重启脚本中。现在,一切都很好。我认为这与使用 kill -9 之间存在关联,但如果没有它,我就会面临挂起、无响应的 Apache 进程。

答案2

我建议您运行一下strace以查看发生了什么:

strace -f -o apache.trace /usr/sbin/httpd

可能是磁盘满了?

答案3

检查日志写入位置的权限,包括文件本身。Apache 需要能够在删除 root 权限时写入日志,如果 Apache 退出,日志将无法再写入,您将无法从日志中获得任何用处。这是您可能遇到的最简单但最令人恼火的问题之一。

如果不是这种情况,@quanta 的建议可能是识别 Apache 救援时发生的情况的最佳方法。

相关内容