如何查找MacPorts是如何占用我的80端口的?

6

我已经安装了MAMP(并且工作正常),然后我尝试通过macPorts安装mongoDB。 macports开始安装一堆依赖项。之后,http://localhost开始显示一个"It Works!"屏幕。重新启动以查看是否可以修复它后,我发现无法启动我的MAMP服务器。控制台显示:

9/13/10 1:20:54 PM  [0x0-0x12012].de.appsolute.MAMP[133]    (48)Address already in use: make_sock: could not bind to address [::]:80

我知道macPorts做了一些愚蠢的事情来干扰我。我该如何找出它安装了什么东西,以窃取端口:80?

这里是我尝试过的一些命令:(:80不起作用,所以我只使用了80)

$ sudo netstat -an | grep 80 
Password:
tcp46      0      0  *.80                   *.*                    LISTEN
udp6       0      0  fe80::21e:52ff:f.123   *.*                    
udp6       0      0  fe80::1%lo0.123        *.*   

并且:

$ lsof -i :80
COMMAND   PID        USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
firefox-b 451 biting_duck   39u  IPv4 0x0ab806b0      0t0  TCP 192.168.0.198:49515->stackoverflow.com:http (ESTABLISHED)
firefox-b 451 biting_duck   40u  IPv4 0x0ab87ec8      0t0  TCP 192.168.0.198:49517->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   41u  IPv4 0x0ab88aec      0t0  TCP 192.168.0.198:49516->pz-in-f95.1e100.net:http (ESTABLISHED)
firefox-b 451 biting_duck   42u  IPv4 0x0ab97334      0t0  TCP 192.168.0.198:49518->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   47u  IPv4 0x0ab87abc      0t0  TCP 192.168.0.198:49519->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   48u  IPv4 0x0ab886e0      0t0  TCP 192.168.0.198:49520->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   50u  IPv4 0x0ab89b1c      0t0  TCP 192.168.0.198:49521->sstatic.net:http (ESTABLISHED)
firefox-b 451 biting_duck   51u  IPv4 0x0ab86680      0t0  TCP 192.168.0.198:49522->peak-colo-196-216.peak.org:http (ESTABLISHED)
firefox-b 451 biting_duck   54u  IPv4 0x0ab81ef8      0t0  TCP 192.168.0.198:49523->gravatar.com:http (ESTABLISHED)
firefox-b 451 biting_duck   55u  IPv4 0x0ab82710      0t0  TCP 192.168.0.198:49524->gravatar.com:http (ESTABLISHED)
firefox-b 451 biting_duck   56u  IPv4 0x0ab8a334      0t0  TCP 192.168.0.198:49526->64.34.80.176:http (ESTABLISHED)
firefox-b 451 biting_duck   57u  IPv4 0x0ab812d4      0t0  TCP 192.168.0.198:49525->pv-in-f101.1e100.net:http (ESTABLISHED)

"It Works!" 来自 Apache(即您的 MAMP 安装)。它必须已经在运行中。 - Awalias
6个回答

17

根据你描述的launchd错误和/private/etc/apache2/httpd.conf,似乎是基本操作系统安装的Apache副本被打开了。请检查“系统偏好设置->服务->Web服务”,如果需要,请关闭它。如果在那里没有被打开,请尝试以下步骤:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

...如果那个方法不起作用,就去看看/Library/LaunchDaemons,看看是否有其他安装了的东西在启动系统副本的Apache(/usr/sbin/httpd)。


1
你是100%正确的!肯定有些东西打开了它(我知道我没有)。我现在感到如此愚蠢,一直绕圈子,只发现是系统偏好设置中的那个愚蠢的复选框。Gordon Davisson,你太棒了! - user446699
谢谢@Gordon Davisson,"It works"让我感到困惑 - 你救了我的一天! - Daniel Flippance
我想知道,什么可能会在没有用户交互的情况下自动启动Apache。同样的事情也发生在我身上,这个答案解决了我的问题(尽管在Mac中不再有这样的设置,终端命令解决了问题)。但是我很确定我没有运行任何东西来实际激活这样的服务,它突然发生了,之前没有做任何特别的操作。同时,MAMP也涉及其中。 - user3934058

4
在Max OS 10.1上,关闭Apache解决了我的问题。
sudo apachectl stop

2

OS X内置了安装在 /etc/apache2 目录下的Apache Web服务器。 当Apache Web服务器启动时,会显示“ It Works! ”消息。 以下是停止/启动它的过程。

sudo apachectl stop
sudo apachectl start

需要使用sudo命令才能访问Web服务器的80端口。


1

确保您的httpd.conf文件正确。这意味着:不要超过1个“Listen 80”。如果您有多个Listen 80(或任何端口),这将触发绑定错误。

希望这对您有用 :)


1
如果某个服务定义了它将监听端口80,那么launchd会在初始启动时保留该端口。它可以是apache,但也可能是其他东西。如果您没有apache,但遇到了这个问题,请尝试。
cd ~/Library/LaunchAgents
grep -R 80 .
cd /System/Library/LaunchDaemons
grep -R 80 .

它应该显示您的代理正在监听端口80。卸载并重新启动!


1

MongoDB端口 并不会安装任何需要或使用80端口的内容。它的依赖也是如此。此外,如果MacPorts端口在启动时占用了80端口,那只有通过安装一个启动守护程序才能实现,但MacPorts本身并不会自动激活任何启动守护程序(您需要手动执行此操作)。

然而,您可以通过执行以下命令找出在特定端口监听的程序:

$ lsof -i :<port>

例如,
$ lsof -i :80

这将显示在80端口上监听的程序。这应该可以缩小抓取该端口的内容。


没有效果。它只显示了我正在使用的 Firefox 浏览器,我试图弄清楚这个问题。 :( 我将代码附加到我的主问题中,因为评论不支持代码块。 - user446699
1
你需要使用 sudo 或者 lsof 命令才能仅显示由你的进程打开的文件。 - Gordon Davisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接