6

所以我一直在使用 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 日,它说:“[2013 年 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 模块已加载。

我试图通过谷歌找出答案,但是——有谁知道 Apache 如何检查它是否已加载?我知道很多要运行的服务锁定文件;尽管 Apache 当前未运行,Apache 是否有可能在某处仍然锁定的锁定文件?



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

4

4 回答 4

19

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

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
于 2013-02-23T21:00:51.970 回答
1

就我而言,我得到了:

(2)No such file or directory: httpd: 无法打开错误日志文件/private/var/log/apache2/error_log。无法打开日志

创建目录 apache2 使其运行。

于 2013-07-22T12:42:02.497 回答
0

robertklep 的指针:

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

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

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

因此,将在没有密码的情况下重做私钥......

于 2013-05-17T21:13:19.820 回答
0

不知道这是否相关,但由于我遇到了同样的问题并且找到了替代解决方案,所以无论如何让我放入我的 2c。

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

关于端口 80 的问题,我曾看到 Skype 占用该端口以及 443,(天知道是什么原因),关闭它后我得到了更好的结果。确保您没有在端口 80 上运行 Skype。

于 2017-08-22T09:48:34.060 回答