为什么apache无法启动,只能在错误日志中说“Configuration Failed”?

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 

这一直使我疯狂。 networking是好的,磁盘是好的,configuration文件通过语法检查,没有任何改变,因为它以前的工作。 它只是拒绝启动,通常在一些负载峰值之后。

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

我在谷歌或这里找不到任何东西。

我终于find了解决办法,通过删除所有站点configuration,模块和configuration指令。

然后,最后,错误日志产生了这个gem:

 [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进程。

我build议你运行strace ,看看发生了什么事情:

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

也许磁盘已满?

检查日志正在写入的位置的权限,包括文件本身。 当Apache从root权限中删除权限时,Apache需要能够写入日志,如果Apache因为不能再写入而被救援出局,那么日志中就没有什么用处了。 这是你遇到的最简单,但最难以捉摸的问题之一。

如果情况并非如此,那么@ quanta的build议可能是识别Apache救援时发生的事情的最好方法。