apache的Ubuntu错误:(98)地址已在使用中

时间:2012-05-24 21:57:41

标签: apache ubuntu-11.10

当我尝试在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

这是我的vhost文件

<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>

我错过了什么?

14 个答案:

答案 0 :(得分:52)

netstat -ltnp | grep :80

这将返回以下内容:

  

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

然后运行以下命令:

sudo kill -9 1047

(1047 - pid no)

(您的特定实例上显示的pid。)

重启Apache。

sudo service apache2 restart

参考Ubuntu Forums

答案 1 :(得分:12)

在所有情况下,杀死进程可能无法正常工作,因为使用端口80的进程将重新启动并且不允许使用该端口。所以可以做的是更改apache的端口,如果这无关紧要的话。

有两件事需要改变:

  1. 使用任何文本编辑器打开/etc/apache2/ports.conf,并将条目Listen 80的值更改为所需的端口(例如Listen 8080)。

  2. <virtualhost 80>的条目更改为/etc/apache2/ports.conf/etc/apache2/sites/enabled/000-default文件中提供的相同端口号(例如<virtualhost 8080>)。

    < / LI>

答案 2 :(得分:10)

似乎端口80已经被占用。使用其他端口或尝试netstatgrep结果仅选择值为80的行),pskill以查看哪个应用占用了端口并关闭它失败了。

答案 3 :(得分:9)

确保您在多个地方没有Listen 80命令。

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

答案 4 :(得分:5)

在我的情况下,它是nginx(因为我在我的服务器上有它)。

sudo service nginx stop
sudo service apache2 start

答案 5 :(得分:3)

sudo netstat -tulpn| grep :80

pkill进程(nginx?)

禁用任何虚拟主机绑定到您不想要的端口80(nginx?)。它位于/ etc / nginx / sites-enabled或/ etc / apache2 / sites-enabled

答案 6 :(得分:1)

sudo kill -9 -2321(pid) 重启BT 做..... 无需在conf中进行更改。文件。

答案 7 :(得分:0)

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

使用sudo /etc/init.d/apache2 reload代替/etc/init.d/apache2 reload

答案 8 :(得分:0)

我遇到了同样的问题。我在CentOS 6.5上使用PHP 5.5.6运行Apache 2.4.7。

我通过使用BOTH output_handler = ob_gzhandler和zlib.output_compression = On来搞乱php.ini(可以设置其中一个,而不是两个)。

因此,在重新启动Apache时,它会绑定到端口80,但没有其他任何事情发生。看起来它正在运行但是php的错误将其锁定在某个地方。

线索是检查“php -v”...当我看到它没有返回任何内容时(它将错误写入error_log),我修复了php.ini并且Apache再次开心。

也许这有助于某人...

答案 9 :(得分:0)

启动apache2时,我在全新安装Ubuntu 12.10时出现此错误。

这是apache2中的一个错误。它挂在后台。以下是我在软件中可能出现错误的演练。

这是我得到的错误:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(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.
The Apache error log may have more information.
                                                                         [fail]

地址已在使用中?什么可以使用它?看看:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

这意味着apache2阻止apache2启动。离奇。这将确认:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

是的,在这种情况下apache2正在运行,我试图在同一个端口上第二次启动apache2。

令我困惑的是,service报告apache2未运行:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

当您查询apache2ctl的状态时,它会挂起。

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

所以Ubuntu在启动时似乎无法管理apache2。是时候停止apache2了:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

一个很大的线索!你试图阻止apache2,它失去了进程ID!所以Ubuntu无法阻止apache2,因为它不知道它在哪里!

你会认为重启会修复它,但它没有,因为apache2在启动时启动并挂起。 apache2的正常启动过程无法正常工作。

那么如何解决?

我能够通过分析ps命令输出来解决此问题。请注意,ps命令告诉我们该进程是由“/etc/rc2.d/S91apache2 start”启动的。

这是需要迅速踢球的违规计划。

/etc/rc2.d/S91apache2是用于在计算机启动时为您启动apache2的符号链接。出于某种原因,它似乎是启动apache2然后挂起。所以我们必须告诉它不要这样做。

所以去看看/etc/rc2.d/S91apache2

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

这是一个符号链接,我们不希望它在那里。这样做是为了防止apache2在启动时启动:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

重新启动计算机以确保apache2无法启动并挂起。好的。现在你可以把apache2放回原来的样子,但这会让它再次失败。

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

相反,像这样启动apache2:

sudo service apache2 start

apache2已备份并再次提供页面服务。似乎有一些严重的错误与apache2 / Ubuntu 12.10导致apache2启动和挂起。这是一个解决方法,我想修复是为了获得更新版本的apache2和Ubuntu并希望最好。

答案 10 :(得分:0)

在我的情况下,我删除了默认的ssl.conf文件(重命名为ssl.conf.bak),并拥有自己的ssl配置文件。

然后我做了一个yum update并更新了apache ...这也重新引入了文件ssl.conf,这意味着我有两个配置文件Listen 443

解决方案(通用 - CentOS):转到/etc/httpd/conf.d,执行grep -r 'Listen' .,查看是否有重复的Listen XXX语句,根据需要将其删除。

答案 11 :(得分: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

现在服务完全停止,您可以正常重新开始。


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

$ ps -ef
$ ps -ef | grep python

答案 12 :(得分:0)

除了解决方案查找过程在:80并且杀死,然后再次开始,

如果您有多个&#34; Listen&#34; apache conf文件或任何.conf文件中的条目包含在apache conf文件中。希望这对某人有帮助.. !!

答案 13 :(得分:0)

这是由于端口80已被其他服务转移使用。

sudo killall httpd

检查所有服务是否仍在使用80

sudo netstat -tulpn| grep :80

然后重新启动服务器

sudo service httpd start

enter image description here