Apache无法启动 - 说httpd模块已加载但未运行

时间:2013-02-23 20:41:10

标签: macos apache configuration virtualhost

所以我一直在使用OS X 10.8.2上的几个虚拟主机。我正在使用Apache2安装和MySQL来运行基于名称的虚拟主机。他们一直都很好地工作到昨晚。突然,我的所有虚拟主机都重定向到“无法连接到”页面。

在摆弄并最终检查错误日志后,我得出结论,Apache实际上并未运行。例如,ps aux | grep apache只返回grep进程。但是,如果我尝试sudo / usr / sbin / apachectl start,我会收到“org.apache.httpd:已经加载”作为回应。

我已经检查了我的httpd.conf文件,它看起来非常好。我看不到任何变化。我还运行了语法检查命令(它在确切时刻逃脱了我的大脑),它返回OK。我在错误日志中找到的唯一的东西,最后一件事,是从昨天,2月21日,它说:“[2月21日星期二21:46:02] [通知]抓住了SIGTERM,关闭了”

从那时起,我的Apache错误日志不包含任何内容(因为它没有运行)。我重新启动,尝试重启apache;我完全不知道为什么它认为它正在运行,即使它不是。

有什么想法吗?

当我尝试启动并重新启动Apache时,在/var/logs/system.log中:

Feb 23 09:27:00 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd[8766]): Exited with code: 1
Feb 23 09:27:00 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd): Throttling respawn: Will start in 10 seconds
Feb 23 09:27:10 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd[8767]): Exited with code: 1
Feb 23 09:27:10 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd): Throttling respawn: Will start in 10 seconds
Feb 23 09:27:16 Baileys-MacBook-Pro.local sudo[8769]:   bailey : TTY=ttys000 ; PWD=/private/var/log ; USER=root ; COMMAND=/usr/sbin/apachectl start
Feb 23 09:27:20 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd[8772]): Exited with code: 1
Feb 23 09:27:20 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd): Throttling respawn: Will start in 10 seconds
Feb 23 09:27:20 Baileys-MacBook-Pro.local sudo[8773]:   bailey : TTY=ttys000 ; PWD=/private/var/log ; USER=root ; COMMAND=/usr/sbin/apachectl restart
Feb 23 09:27:20 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd[8777]): Exited with code: 1
Feb 23 09:27:20 Baileys-MacBook-Pro com.apple.launchd[1] (org.apache.httpd): Throttling respawn: Will start in 10 seconds
Feb 23 09:27:26 Baileys-MacBook-Pro.local sudo[8778]:   bailey : TTY=ttys000 ; PWD=/private/var/log ; USER=root ; COMMAND=/usr/bin/vi system.log

重新启动后此问题仍然存在。从那天起,它将无法启动,但相信httpd模块已加载。

我试图通过Google找到,但是 - 有没有人知道Apache如何检查它是否已加载?我知道很多服务锁文件要运行;尽管Apache当前没有运行,但是有可能在某个地方仍然锁定了一个锁文件吗?



注意:我也在ServerFault上发布了这个 - 我也在这里发布了这个,因为到目前为止我在ServerFault上没有得到任何东西,我一直在关注StackOverflow上的Apache帖子,所以我假设Apache问题适用于Stack。

4 个答案:

答案 0 :(得分:19)

我可以通过启动Apache来重现问题(有点),因为另一个进程已经在Apache想要绑定的同一端口上监听(通常是端口80)。因此,检查是否有另一个进程正在侦听该端口:

sudo lsof -i tcp:80 | grep LISTEN

编辑:也许更简单:您可以在调试模式下手动启动Apache,看看它无法启动的原因是什么:

sudo /usr/sbin/httpd -k start -e Debug -E /dev/stdout

在我的情况下(已经在端口80上侦听的东西),它将产生:

(48)Address already in use: make_sock: could not bind to address 0.0.0.0:80

答案 1 :(得分:1)

在我的情况下,我得到了:

  

(2)没有这样的文件或目录:httpd:无法打开错误日志文件   /私营/无功/日志/的Apache2 / error_log中。无法打开日志

创建目录apache2使其运行。

答案 2 :(得分:0)

robertklep的指针:

sudo / usr / sbin / httpd -k start -e Debug -E / dev / stdout

为我解决了相关问题。我认为同样的症状,不同的原因。 我用SSL& amp;设置了一个测试虚拟主机。自签名证书。

我已经使用密码短语生成了一个私钥。 所以httpd正在等待密码(我没有提供)。 当我开始使用调试选项时,我得到了提示,提供了密码& httpd开始了。

因此,将重做私钥而不使用密码......

答案 3 :(得分:0)

不知道这是否相关,但由于我遇到了同样的问题而我找到了另一种解决方案,所以让我放入我的2c。

当我遇到同样的问题时,请查看这篇文章。事实证明,httpd.conf文件是罪魁祸首。我改变它来安装一些东西。虽然我删除了安装程序文件,但我忘了更改httpd.conf。我希望你没有遇到同样的问题。

关于80号港口的问题,我看过skype猪的端口以及443(上帝知道什么),我把它关掉后效果更好。确保没有在端口80上运行Skype。