【问题标题】:MacPorts Apache2 Stopped Launching on BootMacPorts Apache2 在启动时停止启动
【发布时间】:2011-01-03 19:41:07
【问题描述】:

我最近在两台不同的机器上注意到的一点是,当我启动时,通过 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 守护程序是以相同的方式加载的。它有效,但也没有出现在列表中。如果真的需要整个输出,请告诉我。

更新

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

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

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

更新

我在LaunchDaemons and 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

【问题讨论】:

  • 您是否使用sudo 执行了launchctl?您必须执行 sudo launchctl list 才能获取所有 launchctl 项目,包括 MacPorts 项目。
  • 确认!请参阅上面的最后更新。感谢您的提示。

标签: apache2 macports apache launchd


【解决方案1】:

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

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

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

127.0.0.1 本地盛会

然后我将 /opt/local/apache2/conf/httpd.conf 中的 ServerName 更改为匹配:

服务器名称盛会

Apache 现在为我启动了。”

【讨论】:

    【解决方案2】:

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

    这在机器启动后手动启动时工作正常,但在启动时失败,因为尚未设置环境变量。如上所述,请参阅this question 了解更多信息。

    【讨论】:

      【解决方案3】:

      罗伯:

      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 > 文档 > Tiger > 启动 Apache 上的步骤进行操作。我只需要将路径从 /usr/local/... 调整为 /opt/local/...

      现在 MacPorts Apache2 每次重启都可以正常启动。

      祝你好运,克劳斯

      【讨论】:

        【解决方案4】:

        我发现我的 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 Documentation for Listen 明确指出

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

        我决定尝试切换回只使用

        Listen 80
        

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

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

              我也在其他没有本地 DNS 的非服务器系统上看到了这一点,以及 Apache 需要的其他东西肯定还没有准备好。

              一个有效的方法是编辑位于/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapperapache2.wrapper,MacPorts 的daemondo 用来启动Apache。

              编辑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
              }
              

              【讨论】:

                猜你喜欢
                • 2021-02-12
                • 2016-04-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-11-09
                • 1970-01-01
                • 2020-09-10
                • 2021-02-17
                相关资源
                最近更新 更多