【问题标题】:Amazon EC2 - Apache server restart issueAmazon EC2 - Apache 服务器重启问题
【发布时间】:2012-03-22 09:14:33
【问题描述】:

当我运行这个命令时

sudo /etc/init.d/httpd 重启

它给出了以下错误

停止 httpd:[失败]

正在启动 httpd: (98)地址已在使用中:make_sock: 无法绑定到地址 [::]:80 (98)地址已在使用:make_sock:无法绑定到地址0.0.0.0:80 没有可用的监听套接字,正在关闭 无法打开日志 [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 微型实例

【问题讨论】:

    标签: linux apache amazon-ec2


    【解决方案1】:

    在过去几年中,我管理的服务器很少遇到此问题。不幸的是,如果您在尝试重新启动后遇到 FAILED,则管理端口 80 上的连接的进程将不会释放它在该端口上的保留。

    我会尝试一个完整的“sudo /etc/init.d/httpd stop”等待它完成或失败。

    如果这不能解决问题,您将不得不完全重新启动服务器。希望它配置为在重新启动时自动启动所有内容,但这不能保证。

    "apachectl" 也是 Apache 的好工具,但它可能不在此服务器上,这取决于安装和使用的 linux 发行版。

    如果重新启动服务器后,apache 仍然无法启动,则发生了一些不好的事情。我会考虑在此时拉出所有网站和 conf 文件以创建新服务器,但是 apache 启动,然后失败的消息输出应该让您了解在日志中的何处查看它无法启动的原因。

    【讨论】:

      【解决方案2】:

      我试过了,效果很好:

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

      希望对您有所帮助!

      干杯

      【讨论】:

      • 这非常有用。谢谢:)
      【解决方案3】:

      我从源代码安装 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:

      #!/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
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-03-21
          • 1970-01-01
          • 1970-01-01
          • 2019-08-11
          • 1970-01-01
          • 2013-12-04
          • 1970-01-01
          相关资源
          最近更新 更多