由于端口 80 上的 make_sock 绑定到地址错误,Apache 无法启动

由于端口 80 上的 make_sock 绑定到地址错误,Apache 无法启动

我注意到我的服务器出现了新问题,但我不太清楚是什么原因造成的。我希望有人有处理这个问题的经验,能帮我找到解决办法。

今晚我重启了在slicehost.com上运行的ubuntu服务器。一切运行正常,直到我启动apache。我收到以下错误。

* 启动 Web 服务器 apache2 (98)地址已在使用中:make_sock:无法绑定到地址 0.0.0.0:80 没有可用的监听套接字,正在关闭无法打开日志...失败!

进一步研究netstat -ltnp | grep ':80'将显示以下内容:

tcp 0 0 0.0.0.0:80 0.0.0.0:* 监听 3948/apache2

然后我就可以kill 3948正常启动 Apache 了。PID 3948 不断变为不同的数字。

这是新出现的,自从我成功启动后,我唯一做的事情就是卸载手动安装的 phpmyadmin,然后使用 aptitude install 命令重新安装。phpmyadmin 现在在服务器上运行良好,但我不明白这个错误意味着什么,也不知道该如何解决它。

任何能提供一些见解的人都将不胜感激!

更新: 运行后ls -la /etc/init.d/我得到以下输出。@prix 看起来 httpd 不在这个列表中。

total 308
drwxr-xr-x  2 root root  4096 2010-06-08 16:38 .
drwxr-xr-x 73 root root  4096 2010-08-18 14:56 ..
-rwxr-xr-x  1 root root  6464 2008-09-19 08:42 apache2
-rwxr-xr-x  1 root root  2231 2008-10-14 08:02 bootlogd
-rwxr-xr-x  1 root root  1916 2008-10-14 08:02 bootmisc.sh
-rwxr-xr-x  1 root root  3508 2008-10-14 08:02 checkfs.sh
-rwxr-xr-x  1 root root 10507 2008-10-14 08:02 checkroot.sh
-rwxr-xr-x  1 root root  7948 2008-09-25 04:12 console-screen.kbd.sh
-rwxr-xr-x  1 root root  1670 2008-06-11 16:02 console-setup
-rwxr-xr-x  1 root root  2653 2008-09-09 14:52 cron
-rwxr-xr-x  1 root root  7195 2008-09-29 05:15 glibc.sh
-rwxr-xr-x  1 root root  1329 2008-10-14 08:02 halt
-rwxr-xr-x  1 root root  1287 2008-10-14 08:02 hostname.sh
-rwxr-xr-x  1 root root  4528 2008-09-25 08:07 hwclockfirst.sh
-rwxr-xr-x  1 root root  4521 2008-09-25 08:07 hwclock.sh
-rwxr-xr-x  1 root root  1404 2008-06-11 16:02 keyboard-setup
-rwxr-xr-x  1 root root  1484 2008-10-14 08:02 killprocs
-rwxr-xr-x  1 root root  1818 2008-08-29 19:41 klogd
-rwxr-xr-x  1 root root   748 2008-06-21 17:30 loopback
-rwxr-xr-x  1 root root  1399 2008-10-14 10:51 module-init-tools
-rwxr-xr-x  1 root root   620 2008-10-14 08:02 mountall-bootclean.sh
-rwxr-xr-x  1 root root  1956 2008-10-14 08:02 mountall.sh
-rwxr-xr-x  1 root root  1351 2008-10-14 08:02 mountdevsubfs.sh
-rwxr-xr-x  1 root root  2296 2008-10-14 08:02 mountkernfs.sh
-rwxr-xr-x  1 root root   618 2008-10-14 08:02 mountnfs-bootclean.sh
-rwxr-xr-x  1 root root  2330 2008-10-14 08:02 mountnfs.sh
-rwxr-xr-x  1 root root  1321 2008-10-14 08:02 mountoverflowtmp
-rwxr-xr-x  1 root root  3668 2008-10-14 08:02 mtab.sh
-rwxr-xr-x  1 root root  5755 2008-09-19 07:02 mysql
-rwxr-xr-x  1 root root  2515 2008-09-19 07:02 mysql-ndb
-rwxr-xr-x  1 root root  1905 2008-09-19 07:02 mysql-ndb-mgm
-rwxr-xr-x  1 root root  2663 2008-06-23 09:21 networking
-rwxr-xr-x  1 root root  1271 2008-10-27 06:17 procps
-rwxr-xr-x  1 root root  9600 2008-10-14 08:02 rc
-rwxr-xr-x  1 root root   788 2008-10-14 08:02 rc.local
-rwxr-xr-x  1 root root   117 2008-10-14 08:02 rcS
-rw-r--r--  1 root root  1510 2008-10-14 08:02 README
-rwxr-xr-x  1 root root   639 2008-10-14 08:02 reboot
-rwxr-xr-x  1 root root   941 2008-10-14 08:02 rmnologin
-rwxr-xr-x  1 root root  5200 2008-07-28 08:42 rsync
-rwxr-xr-x  1 root root 33378 2008-05-20 02:27 sendmail
-rwxr-xr-x  1 root root  2283 2008-10-14 08:02 sendsigs
-rwxr-xr-x  1 root root   590 2008-10-14 08:02 single
-rw-r--r--  1 root root  4167 2008-10-14 08:02 skeleton
-rwxr-xr-x  1 root root  3710 2008-10-13 13:52 ssh
-rwxr-xr-x  1 root root   525 2008-10-14 08:02 stop-bootlogd
-rwxr-xr-x  1 root root  1096 2008-10-14 08:02 stop-bootlogd-single
-rwxr-xr-x  1 root root  3483 2008-08-29 19:41 sysklogd
-rwxr-xr-x  1 root root  2488 2008-10-24 05:38 udev
-rwxr-xr-x  1 root root   706 2008-10-24 05:38 udev-finish
-rwxr-xr-x  1 root root  3627 2008-10-14 08:02 umountfs
-rwxr-xr-x  1 root root  2140 2008-10-14 08:02 umountnfs.sh
-rwxr-xr-x  1 root root  1456 2008-10-14 08:02 umountroot
-rwxr-xr-x  1 root root  1815 2008-10-14 08:02 urandom
-rwxrwxr-x  1 root root  1314 2010-03-04 19:22 webmin
-rwxr-xr-x  1 root root  1777 2008-10-23 08:40 x11-common
-rwxr-xr-x  1 root root  2154 2008-07-28 07:27 xinetd

答案1

好吧,在创建了一个开发服务器作为精确副本来尝试新事物之后,我想我已经搞清楚了。我将在下面介绍我的流程,希望它能在未来帮助其他人。

我做的第一件事就是将端口改为不同的数字,这样我就能看到端口 80 上仍在运行什么。

sudo nano /etc/apache2/ports.conf

我原本有:

Listen 80
Listen 443

所以我把它们改成了:

Listen 88
Listen 443

这让我可以去看看现在我的端口上正在运行什么sudo netstat -lpAinet

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:448                   *:*                     LISTEN      4183/apache2    
tcp        0      0 localhost:mysql         *:*                     LISTEN      3741/mysqld     
tcp        0      0 localhost:submission    *:*                     LISTEN      3973/sendmail: MTA:
tcp        0      0 *:www                   *:*                     LISTEN      4025/apache2    
tcp        0      0 *:ssh                   *:*                     LISTEN      3651/sshd       
tcp        0      0 *:kerberos              *:*                     LISTEN      4183/apache2    
tcp        0      0 localhost:smtp          *:*                     LISTEN      3973/sendmail: MTA:
tcp        0      0 *:https                 *:*                     LISTEN      4025/apache2

如果您注意到 PID 4025 在 *:www 和 *:https 上运行。这是搞乱了整个事情的 apache 实例。因此执行kill -9 {PID}将彻底终止该进程。(老实说,我不知道 kill -9 有什么用,但它对我有用。如果它不完全正确,有人可能想纠正它。

我的下一个输出很棒。现在正在运行一个 Apache 实例。sudo netstat -lpAinet

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:448                   *:*                     LISTEN      4183/apache2    
tcp        0      0 localhost:mysql         *:*                     LISTEN      3741/mysqld     
tcp        0      0 localhost:submission    *:*                     LISTEN      3973/sendmail: MTA:
tcp        0      0 *:webmin                *:*                     LISTEN      4233/perl       
tcp        0      0 *:ssh                   *:*                     LISTEN      3651/sshd       
tcp        0      0 *:kerberos              *:*                     LISTEN      4183/apache2    
tcp        0      0 localhost:smtp          *:*                     LISTEN      3973/sendmail: MTA:
udp        0      0 *:10000                 *:*                                 4233/perl

现在我已经找到问题,我将 ports.conf 改sudo nano /etc/apache2/ports.conf回原始设置。

sudo /etc/init.d/apache2 stop我简单地停止并启动了Apache sudo /etc/init.d/apache2 start,一切运行良好。对我来说,真正的测试是重新启动服务器,看看它是否像预期的那样工作。运行良好。

我从一篇有关 RedHat 的文章中读到:http://www.linuxquestions.org/questions/linux-software-2/98-address-already-in-use-make_sock-could-not-bind-to-address-0-0-0-0-443-a-110753/#post1153056

问题是因为:

仅当您启动 Web 服务器,然后进行某些修改,或者尝试加载 JSP 或 ASP 支持,然后尝试重新启动它时,才会出现此问题。

所以希望这能帮助到我在谷歌上搜索到的遇到同样问题但没有找到真正解决方案的其他人。无论如何,这对我的情况有用。顺便说一句 - 这也可能是因为我使用的是云服务器。不确定。

答案2

如果你进行了配置更改,然后使用以下命令重新启动 apache

service httpd restart

然后您将遇到这个问题,您将必须终止所有 httpd 进程并重新启动 apache。

killall -9 httpd
service httpd start

为了防止这种情况发生,当您进行配置更改时,请勿使用

service httpd restart

使用

service httpd reload

我已经对此进行了测试并且它已经为我修复了受影响的两台服务器上的问题。

相关内容