MacPorts Apache2在启动时停止启动
我最近在两台不同的机器上注意到,通过MacPorts安装的Apache2在启动时似乎已经停止启动。老实说,我不能保证它以前是这样做的,但我想我会注意到这一点,因为安装LaunchDaemon是我安装过程的一部分。事实上,如果我尝试重新加载LaunchDaemon,它会失败:MacPorts Apache2在启动时停止启动,apache2,macports,apache,launchd,Apache2,Macports,Apache,Launchd,我最近在两台不同的机器上注意到,通过MacPorts安装的Apache2在启动时似乎已经停止启动。老实说,我不能保证它以前是这样做的,但我想我会注意到这一点,因为安装LaunchDaemon是我安装过程的一部分。事实上,如果我尝试重新加载LaunchDaemon,它会失败: $ sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist org.macports.apache2: Already loaded
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
org.macports.apache2: Already loaded
除非我手动启动Apache(使用sudo apachectl restart
),否则在进程列表中搜索“apache2”或“httpd”只会产生以下结果:
$ 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
我不确定这是否会有帮助,但还是有更多的信息
更新
我问了一个不同但相关的问题。随着我了解更多,我将更新这两个问题
更新
今天,基于邮件列表输入,我尝试使用通配符主目录。在学术上,它比我想要的更具包容性,但实际情况是,我是唯一一个使用这台电脑的人;当然是唯一一个有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
既然我现在知道Apache为什么在启动时停止加载,我将清楚地说明这个答案,并将这个问题标记为已回答。Apache在启动时停止启动的原因是我正在尝试跨系统共享一个httpd.conf
文件。配置文件需要包含我的主目录中存在的目录中的文件。由于每台机器上的主目录不同,我试图引用${home}
环境变量
当机器启动后手动启动时,这可以正常工作,但启动时失败,因为环境变量尚未设置。如上所述,有关更多信息,请参阅。Rob:
祝你好运,Klaus我发现我的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时,日志编写得很好),但没有任何帮助
即使法律明确规定
可以使用多个Listen指令指定要侦听的多个地址和端口。服务器将响应来自任何列出的地址和端口的请求
我决定试着重新使用它
Listen 80
执行此操作后,apache2将在引导时启动,没有任何错误或警告。如果将Subversion用于Apache,您可能会发现Apache没有启动,因为mod_dav_svn.so文件已移动到/opt/local/libexec。您需要调整Apache启动文件以适应此文件的新位置。在较新版本的MacPorts中,您可以运行
sudo port load apache2
来指示MacPorts处理启动CTL设置并自动启动进程。要停止进程,请运行端口卸载
加载后,检查/opt/local/apache2/logs/error\u log
是否有错误,包括配置问题。我在这里找到了这个问题的答案:
“显然,我在更改本地dnsmasq config.In/etc/hosts时解决了这个问题,我在环回条目中添加了我的服务器名(gala):
127.0.0.1本地主机晚会
然后我更改了/opt/local/apache2/conf/httpd.conf中的ServerName以匹配:
服务器名晚会
Apache现在为我启动。”除了我的启动之外,我还发现有时候Apache无法启动,因为系统中的其他东西还没有准备好
在一台OSX服务器机器上,我还使用DNS为机器创建“仅限内部”的DNS名称,该名称用于我的Apache配置。有时,当Apache尝试启动DNS服务器时,DNS服务器尚未就绪,Apache无法加载,因为主机名无效
我在其他没有本地DNS的非服务器系统上也看到了这一点,在这些系统中,Apache需要的其他东西还没有准备好
O
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
}