当我运行这个命令
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并杀死它,然后重新开始,它应该可以正常工作
我试过这个,它的工作原理:
希望对你有帮助!
干杯