首页 > 代码库 > HTTP重启失败

HTTP重启失败

由于线上的空间满了,我先是切到根目录下然后用:

#du -h --max-depth=1

查看没有发现报满的空间有问题,于是查看是不是有些死进程占用的空间,于是用:

#lsof |grep delete

看到好多httpd的进程,上报后同意重启http,直接重启失败报下面的错误:

---------------------------------------------------------------------------------------------------------------------

Stopping httpd:                                            [FAILED]
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

-------------------------------------------------------------------------------------------------------------------
在百度里查到的信息是说:

“至于日志目录,当然是看你apche里配置的日志路径所在目录是否存在了

2个原因,一个是有其他程序占用80端口,还有一个原因,配置文件中监听的80端口重复。
请仔细检查下配置 Listen  参数

80端口被其他程序占用,
losf -i:80 

让这样处理。于是自己就用

 fuser -k -n tcp 80

处理了一下,接着重启httpd成功。

httpd-manual  mod_auth_mysql mod_perl mod_ssl

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

undefined symbol: apr_ldap_ssl_init

###在64bit机器上,使用yum remove把非64的i386/i686全部的安装包全部清除之后重启httpd出现错误:

Starting httpd: httpd: Syntax error on line 161 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_ldap.so into server: /etc/httpd/modules/mod_ldap.so: undefined symbol: apr_ldap_ssl_init

###在httpd.conf文件中把mod_ldap.so注释之后则出现以下错误:
Starting httpd: httpd: Syntax error on line 162 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_authnz_ldap.so into server: /etc/httpd/modules/mod_authnz_ldap.so: undefined symbol: apr_ldap_url_parse

###在httpd.conf文件中把mod_authnz_ldap.so注释之后虽然不错了,但是发生这样的错误感到莫名奇妙,很不舒服!

 

###于是接下来开始折腾了。。。。折腾了几个小时。。。。。使用“yum install httpd”重装apache以及所有相关包。。。。下载apache2.2.14最新稳定版源码重新编译。。。。。重新下载apr及apr-util源码编译安装。。。。删除再安装。。。安装再删除。。。网上几乎查遍了所有中英文网站资料。。。依然不行。。。。。真是折腾!!!(从后来知道的原因来看实在无语。。。。。。因此要广而告之!!!)

 

###以下是配置过程中出现的其它错误,列在这里以供搜索到此并供参考:
httpd: Syntax error on line 161 of /usr/local/apache2/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_ldap.so into server: /etc/httpd/modules/mod_ldap.so: undefined symbol: ldap_simple_bind_s

 

###在解决问题过程中开始怀疑ldap相关包有问题,而来在网上资料中发现应该是apr-util包有问题。

 

###那到底是什么原因?怎么解决呢? 执行./httpd -V 看看版本吧!

Server version: Apache/2.2.3
Server built:   Jul 15 2009 09:02:25
Server‘s Module Magic Number: 20051115:3
Server loaded:  APR 1.3.9, APR-Util 1.3.9             ###错误的! 
Compiled using: APR 1.2.7, APR-Util 1.2.7            ###不兼容!
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)

 

那为什么会装载1.3.9呢?执行export看看这个LD_LIBRARY_PATH环境变量吧!有没有指向类似/usr/local/apr/lib呢?

如果有的话,一般有人设置在这个文件:/etc/profile

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

先把它注释并重新登录用户,再执行./httpd -V应该这样就可以了:

 

Server version: Apache/2.2.3
Server built:   Jul 15 2009 09:02:25
Server‘s Module Magic Number: 20051115:3
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)

 

那么是谁配置了LD_LIBRARY_PATH环境变量呢?我在网上查到安装tomcat的时候有用到,那应该是我同事加的,加完之后没有重启httpd是不会发现错误的。


本文出自 “沙漠之鹘” 博客,请务必保留此出处http://shamozhihu.blog.51cto.com/6144046/1561548

HTTP重启失败