7

我最近在两台不同的机器上注意到的一点是,当我启动时,通过 MacPorts 安装的 Apache2 似乎已经停止启动。诚实的事实是,我不能发誓以前这样做过,但我认为我会注意到这一点,因为安装 LaunchDaemon 是我安装过程的一部分。事实上,如果我尝试重新加载 LaunchDaemon,它会失败:

$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
org.macports.apache2: Already loaded

除非我手动启动 Apache(使用sudo apachectl restart),否则在我的进程列表中对“apache2”或“httpd”进行 grep'ing 只会产生以下结果:

$ sudo ps -ef | egrep "apache2|httpd"
    0    52     1   0   0:00.06 ??         0:00.08 /opt/local/bin/daemondo --label=apache2 --start-cmd /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper restart ; --pid=none

1410639199 6960 6792 0 0:00.00 ttys001 0:00.00 egrep apache2|httpd

看起来守护程序本身就位,但没有可执行文件。据我所知/可以告诉,相关的可执行文件(httpd 和 apachectl)是每个人都可以执行的。

有没有其他人注意到这一点?有任何想法吗?

更新

按照下面的要求,我确实执行了launchctl list. 清单很长,我不知道如何剪掉它,但只要说没有org.macports.*列出任何项目就足够了。这本身很有趣,因为我的 MySQL 守护程序是以相同的方式加载的。它有效,但也没有出现在列表中。让我知道是否真的需要整个输出。

更新

我假设我是launchctl list在 sudo 下执行的,但在 mipadi 下面的评论提示下,我再次尝试确保我这样做并且我假设不正确。在 sudo 下执行时,出现 MacPorts 项:

51  -   org.macports.mysql5
52  -   org.macports.apache2

我不确定这是否会有所帮助,但仍然有更多信息。

更新

我在LaunchDaemons 和 Environment Variables提出了一个不同但相关的问题。随着我了解更多,我会更新这两个问题。

更新

今天,根据邮件列表输入,我尝试使用通配符主目录。在学术上,它比我想要的更具包容性,但实际情况是我是唯一一个使用这台电脑的人;当然是唯一一个拥有 Apache 配置文件的人。

Include "/Users/*/Dropbox/Application Support/apache/conf.d.osx/*.conf"
Include "/Users/*/Library/Application Support/MacPorts/apache/conf.d/*.conf"

很遗憾...

httpd: Syntax error on line 512 of /opt/local/apache2/conf/httpd.conf: Wildcard patterns not allowed in Include /Users/*/Dropbox/Application Support/apache/conf.d.osx/*.conf
4

7 回答 7

2

我在这里找到了这个问题的答案:

https://trac.macports.org/ticket/36101

“我显然在更改本地 dnsmasq 配置时解决了这个问题。在 /etc/hosts 中,我将我的服务器名称 (gala) 添加到了环回条目中:

127.0.0.1 本地主机盛会

然后我在 /opt/local/apache2/conf/httpd.conf 中更改了 ServerName 以匹配:

服务器名称盛会

Apache 现在为我启动。”

于 2014-03-24T06:41:47.167 回答
1

因为我现在知道为什么Apache 在启动时停止加载,所以我将阐明这个答案并将这个问题标记为已回答。Apache 在启动时停止启动的原因是我正在尝试httpd.conf跨系统共享文件。配置文件需要Include来自我的主目录中存在的目录中的文件。由于每台机器上的主目录不同,我试图引用${HOME}环境变量。

这在机器启动后手动启动时工作正常,但在启动时失败,因为尚未设置环境变量。如上所述,请参阅此问题以获取更多信息。

于 2010-03-04T15:11:36.340 回答
1

抢:

  1. 有同样的问题:“sudo launchctl load -w ...”在我登录时启动了 Apache2,但在启动期间没有工作(“-w”应该已经解决了这个问题)。此外,正如您所注意到的,该守护进程似乎已在 launchctl 中注册。它将显示“sudo launchctl list”,另一个“sudo launchctl load ...”将导致错误消息。

  2. 我玩过“sudo port load apache2”和“sudo port unload apache2”,但无法在重启时运行 httpd。

  3. 最后,我去掉了 MacPorts 启动项:“sudo port unload apache2”,用“sudo launchctl list”检查了 org.macports.apache2 不再注册启动。

  4. 之后,我按照http://diymacserver.com > Docs > Tiger > Starting Apache 上的步骤进行操作。我只需要将路径从 /usr/local/... 调整为 /opt/local/...

现在 MacPorts Apache2 在每次重新启动时都能正常启动。

祝你好运,克劳斯

于 2010-07-08T22:17:43.947 回答
0

我发现我的 MacPorts apache2 没有在启动时启动,因为我的httpd.conf.

我正在使用

Listen 127.0.0.1:80
Listen 192.168.2.1:80
Listen 123.123.123.123:80 # Example IP, not the one I was really using

在 Console.app 我看到

4/8/12 4:59:06.208 PM org.macports.apache2: (49)Can't assign requested address: make_sock: could not bind to address 192.168.2.1:80
4/8/12 4:59:06.208 PM org.macports.apache2: no listening sockets available, shutting down
4/8/12 4:59:06.208 PM org.macports.apache2: Unable to open logs

我尝试调整所有日志文件夹的权限(尽管当我手动启动 apache2 时日志写得很好),但这并没有帮助。

即使Apache 的 Listen 文档明确指出

可以使用多个 Listen 指令来指定要侦听的地址和端口数。服务器将响应来自任何列出的地址和端口的请求。

我决定尝试切换回只使用

Listen 80

这样做之后,apache2 将在启动时启动,没有错误或警告。

于 2012-04-09T00:19:15.733 回答
0

如果您将 Subversion 与 Apache 一起使用,您可能会发现 Apache 没有启动,因为 mod_dav_svn.so 文件已移动到 /opt/local/libexec。您需要调整 Apache 启动文件以适应该文件的新位置。

于 2013-08-18T00:13:30.107 回答
0

在较新版本的 MacPorts 中,您可以运行sudo port load apache2以指示 MacPorts 处理 launchctl 设置并自动启动该过程。停止进程运行port unload

加载后检查/opt/local/apache2/logs/error_log错误,包括配置问题。

于 2013-10-11T18:07:21.213 回答
0

除了我之前的回答之外,我还发现有时 Apache 无法启动是因为系统中的其他东西还没有准备好。

在一台 OS X Server 机器上,我还使用 DNS 为机器创建一个“仅限内部”的 DNS 名称,并且该名称用于我的 Apache 配置中。有时,当 Apache 尝试启动 DNS 服务器时,DNS 服务器尚未准备好,而 Apache 无法加载,因为主机名无效。

我也在其他没有本地 DNS 的非服务器系统上看到了这一点,以及 Apache 所需的其他东西必须尚未准备好。

有效的一件事是编辑MacPorts用来启动 Apache的apache2.wrapper位置。/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapperdaemondo

编辑该Start()函数以添加一个sleep命令以在启动 Apache 之前稍等片刻。

原件(我机器上的第 14-17 行)

Start()
{
    [ -x /opt/local/apache2/bin/apachectl ] && /opt/local/apache2/bin/apachectl start > /dev/null
}

添加了等待时间

Start()
{
    [ -x /opt/local/apache2/bin/apachectl ] && sleep 10 && /opt/local/apache2/bin/apachectl start > /dev/null
}
于 2014-04-03T00:03:56.927 回答