Amazon EC2 – Apache服务器重启问题

当我运行这个命令

sudo /etc/init.d/httpd restart

它给出了以下错误

停止httpd:[失败]

启动httpd:(98)已经在使用的地址:make_sock:无法绑定到地址[::]:80(98)地址已经在使用中:make_sock:无法绑定到地址0.0.0.0:80没有监听套接字可用,closuresdown无法打开日志[FAILED]


我检查正在运行的程序在端口80通过使用

netstat -lnp | grep:80(它给出下面的输出)

tcp 0 0 ::: 80 ::: * LISTEN 21739 / httpd


为什么我不能停止使用sudo /etc/init.d/httpd restart停止Apache

下面的命令工作没有问题

sudo apachectl停止

sudo apachectl启动

我正在使用亚马逊EC2的Linux微型实例

我遇到了这个问题,当我从源码安装Apache,但后来试图运行

$ sudo /etc/init.d/httpd restart 

这是使用预先安装的版本的Apache。 /etc/init.d/httpd中的stop指令不会删除在启动源代码安装的apache版本时创建的httpd.pid文件。

要确定这是否也是问题的原因,请在运行时查找httpd.pid文件的设置位置

 $ sudo apachectl start 

如果你是从源代码安装的,并且apache2位于/ usr / local / apache2,那么应该在/ usr / local / apache2 / logs中创建httpd.pid文件。 当你停止运行Apache

 $ sudo apachectl stop 

这个文件应该被删除。 所以要测试httpd.pid文件是否导致您的问题,请通过调用启动Apache

 $ sudo apachectl start 

并找到httpd.pid文件。 然后尝试使用停止apache

 $ sudo /etc/init.d/httpd stop 

如果原始的httpd.pid文件仍然存在,那么这就是为什么Apache使用时无法启动

 $ sudo /etc/init.d/httpd start 

为了使我的/etc/init.d/httpd文件正常工作,我明确地把调用apachectl放在start和stop方法中:

 #!/bin/bash # /etc/init.d/httpd # # Path to the apachectl script, server binary, and short-form for messages. apachectl=/usr/local/apache2/bin/apachectl httpd=/usr/local/apache2/bin/httpd pid=/usr/local/apache2/logs/httpd.pid prog=httpd RETVAL=0 start() { echo -n $"Starting $prog: " $apachectl -k start RETVAL=$? echo return $RETVAL } stop() { echo -n $"Stopping $prog: " $apachectl -k stop RETVAL=$? echo } 

我觉得最好杀死进程本身,找出进程ID并杀死它,然后重新开始,它应该可以正常工作

我试过这个,它的工作原理:

  1. sudo fuser -k -n tcp 80
  2. sudo服务httpd启动

希望对你有帮助!

干杯