无法启动 Apache - 地址已被使用 - httpd 已停止

无法启动 Apache - 地址已被使用 - httpd 已停止

我正在尝试在“虚拟私有云”上设置 Amazon EC2 Web 服务器。我使用它而不是标准 EC2 实例,因为我需要分配多个公共 IP,而这需要使用 VPC。

无论如何,经过许多周折,我终于启动并运行了实例,并通过 SSH 连接。我从一个运行良好的标准 Web 服务器的图像中构建了实例。但是,我似乎无法启动 Apache:

# service httpd status
httpd is stopped
# service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(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
                                                           [FAILED]
# netstat -ltnp
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:22                  0.0.0.0:*                   LISTEN      1243/sshd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1275/sendmail
tcp        0      0 0.0.0.0:9306                0.0.0.0:*                   LISTEN      1225/searchd
tcp        0      0 0.0.0.0:9312                0.0.0.0:*                   LISTEN      1225/searchd
tcp        0      0 :::80                       :::*                        LISTEN      1289/httpd
tcp        0      0 :::22                       :::*                        LISTEN      1243/sshd
tcp        0      0 :::443                      :::*                        LISTEN      1289/httpd
# ps aux | grep httpd
root      1287  0.0  0.2 108476  1780 ?        S    21:17   0:00 /bin/bash /etc/rc3.d/S85httpd start
root      1288  0.0  0.2  11348  1332 ?        S    21:17   0:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/httpd
root      1289  0.0  1.2 211888  7764 ?        S    21:17   0:00 /usr/sbin/httpd

所以我有点困惑。Apache 没有运行(作为服务,我也没有将其设置为以其他方式运行),我无法启动该服务,但这不是说 Apache 正在运行吗?有什么解决办法吗?

添加于 2012 年 12 月 4 日

Apache 已安装并设置为在启动时自动启动chkconfig --levels 235 httpd on,这就是 httpd 进程在启动时运行的原因。但是,当您输入时,service httpd status它仍然显示为已停止,并且无法通过 Web 浏览器访问。

为了真正重新启动 Apache,您似乎需要正常终止该进程(kill -15 1289有效,其中 1289 是进程 ID),然后输入service httpd start。现在您可以毫无问题地启动、停止、重新启动和重新加载 Apache。

但是,我希望能够立即使用服务命令,进一步研究后,我得出了一个没有人能够真正提供的结论:其中一个 SSL 密钥需要密码,但无法在启动时输入密码(显然),因此该过程无法正常启动。我删除了密码(反正我们并不真正想要它)并重新启动。现在,当我使用时,service httpd status我得到了httpd dead but subsys locked。我必须删除它/var/lock/subsys/httpd才能再次正确启动该过程。

因此,这感觉像是进步,但这个过程仍然不会自动启动。

请提供一些想法,好吗?

答案1

tcp 0 0 :::80 :::* 侦听 1289/httpd

Httpd 正在运行,其进程 ID 为 1289。如果由于某些不寻常的原因,它不是 Apache,而是其他也名为 httpd 的进程,那么您可能能够使用类似 的命令找到更多信息lsof -n -p 1289

您可能只需要kill这个过程。

答案2

我想说 apache 正在运行,您可以在显示中看到它....netstat 表示进程 1289 正在监听端口 80,并且 ps 也显示了这一点。httpd 是 apache!

因此您可能只需 kill -9 1289(以 root 身份)然后重新启动即可。

相关内容