MacPorts Apache2在启动时停止启动

时间:2010-01-11 16:03:32

标签: apache2 macports apache launchd

我最近在两台不同的机器上注意到的一点是,通过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

7 个答案:

答案 0 :(得分:2)

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

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

"我在更改本地dnsmasq配置时显然修复了此问题。在/ etc / hosts中,我将我的servername(gala)添加到loopback条目中:

  

127.0.0.1 localhost gala

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

  

ServerName晚会

Apache现在开始为我启动。"

答案 1 :(得分:1)

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

在引导计算机后手动启动时可以正常工作,但由于尚未设置环境变量,因此在启动时失败。如上所述,有关详细信息,请参阅this question

答案 2 :(得分: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>上的步骤进行操作。文档>老虎>启动Apache。我只需要调整从/ usr / local / ...到/ opt / local /...

  5. 的路径

    现在MacPorts Apache2每次重启都会正常运行。

    祝你好运,克劳斯

答案 3 :(得分: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 Documentation for Listen明确说明

  

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

我决定尝试切换回使用

Listen 80

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

答案 4 :(得分:0)

如果您在Apache上使用Subversion,您可能会发现Apache没有启动,因为mod_dav_svn.so文件已移至/ opt / local / libexec。您需要调整Apache启动文件以考虑此文件的新位置。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

除了previous answer之外,我还发现有时Apache无法启动,因为系统中的其他内容尚未准备好。

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

我也在没有本地DNS的其他非服务器系统上看到过这种情况,而Apache所需的其他东西还没有准备就绪。

有一项功能是修改位于apache2.wrapper的{​​{1}},/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.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
}