Ubuntu错误与Apache相关:(98)地址已经在使用中。

40

在尝试启动Ubuntu中的Apache时,我遇到了这个错误。

 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
 no listening sockets available, shutting down
 Unable to open logs
 Action 'start' failed.

我在我的ports.conf文件中有以下内容

NameVirtualHost *:80
Listen 80

这是我的虚拟主机文件

<VirtualHost *:80>
          ServerAdmin example@example.com
          ServerName rails.server.com
          # ServerAlias
          DocumentRoot /var/www/sample_app/current/public
          ErrorLog /var/www/sample_app/error.log

          RailsEnv production
        <Directory "/var/www/sample_app/current/public">
          Options Indexes FollowSymLinks MultiViews
          Order allow,deny
          Allow from all
        </Directory>
</VirtualHost>

我漏掉了什么?


1
端口80已被占用。您是否正在运行另一个Web服务器? - Mitch Dempsey
我不知道有没有。有没有办法查看正在使用该端口的内容? - SilverNightaFall
15个回答

80
netstat -ltnp | grep :80

这将返回以下结果:

tcp6 0 0 :::80 :::* LISTEN 1047/apache2

然后运行以下命令:
sudo kill -9 1047

(1047 - 进程号)

(它是出现在您特定实例上的进程号。)

重新启动Apache。

sudo service apache2 restart

参考Ubuntu论坛


对于那些没有netstat命令的用户,请安装net-tools软件包。使用以下命令进行安装:sudo apt install net-tools。 - Agustín Clemente

13

看起来端口80已经被占用了。请使用另一个端口或尝试使用 netstat 命令(在结果中使用 grep 只选择包含80值的行),使用 pskill 命令查看哪个应用程序占用了该端口并将其关闭。


12
在所有情况下,直接杀掉进程可能不会生效,因为使用80端口的进程将被重新启动,并且不允许使用该端口。所以如果这并不重要的话,可以更改 Apache 的端口。
需要更改两个东西:
1. 用任何文本编辑器打开`/etc/apache2/ports.conf`文件,并将条目`Listen 80`的值更改为所需端口(例如,`Listen 8080`)。 2. 将`/etc/apache2/sites-enabled/000-default`中的`<virtualhost 80>`条目更改为与`/etc/apache2/ports.conf`文件中给出的相同端口号(例如,`<virtualhost 8080>`)。

9

请确保命令 Listen 80 只在一个位置出现。

在我的情况下,我遇到了同样的错误,原因是这个命令同时存在于 ports.conf 和 sites-enabled/000-default 中。


现在发现答案似乎很显然,但我曾经遇到过完全相同的问题。你发布这个答案是明智之举。 - The Thirsty Ape
我在ports.conf和反向代理配置中遇到了同样的问题。非常感谢! - Rajiv

6
在我的情况下,是因为我在服务器上安装了nginx。
sudo service nginx stop
sudo service apache2 start

4
sudo netstat -tulpn| grep :80

pkill 命令可以结束一个进程(nginx?)。

如果你不想要绑定到端口80的虚拟主机(nginx?),可以禁用它。配置文件在 /etc/nginx/sites-enabled 或者 /etc/apache2/sites-enabled 中。


1
这是因为端口80被其他服务使用而移动了。
sudo killall httpd

检查是否仍有任何服务使用80端口。
sudo netstat -tulpn| grep :80

并重新启动服务器

sudo service httpd start

enter image description here


1

sudo kill -9 -2321 (pid) 重新启动BT 完成..... 不需要更改配置文件。


0

当前正在运行的服务列表

$ sudo netstat -tulpn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8069            0.0.0.0:*               LISTEN      6399/python     
tcp        0      0 0.0.0.0:53670           0.0.0.0:*               LISTEN      6681/Brackets-node
....
....

仅查找特定的服务,

$ sudo netstat -tulpn| grep python
jpa@jpa-dell:~/odoo/master-hr-holidays-newapi-jpa$ sudo netstat -tulpn| grep python
tcp        0      0 0.0.0.0:8069            0.0.0.0:*               LISTEN      6399/python     
tcp        0      0 127.0.0.1:41974         0.0.0.0:*               LISTEN      3123/python 

你有没有注意到上面的结果PID(6399)正在运行Python。

使用以下命令终止该服务:

$ sudo kill -9 -6399

现在服务已完全停止,您可以正常重新启动。


查找正在运行的服务的额外命令,

$ ps -ef
$ ps -ef | grep python

0

当您通过终端重新启动或启动服务器时,您可能忘记在命令前添加sudo

请使用sudo /etc/init.d/apache2 reload而不是/etc/init.d/apache2 reload


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