我最近在两台不同的机器上注意到的一点是,通过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
答案 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)
罗布:
有同样的问题:“sudo launchctl load -w ...”在我登录时启动了Apache2,但在启动期间没有工作(“-w”应该已经处理好了)。另外,正如您所注意到的,守护进程似乎已在launchctl中注册。它将显示“sudo launchctl list”,另一个“sudo launchctl load ...”将导致错误消息。
我使用“sudo port load apache2”和“sudo port unload apache2”,但无法在重启时运行httpd。
最后,我摆脱了MacPorts启动项:“sudo port unload apache2”,用“sudo launchctl list”检查,org.macports.apache2不再注册启动。
之后,我按照http://diymacserver.com>上的步骤进行操作。文档>老虎>启动Apache。我只需要调整从/ usr / local / ...到/ opt / local /...
现在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。
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
}