当我的服务器启动时,一切正常。 Apache2开始提供内容,我的网站正在按预期工作。
'一段时间'(几天到几周)之后,我再也无法访问我的任何网站了。 Apache2停止向我的浏览器提供内容。
这是我几个月来的一个反复出现的问题。我第一次体验它,是在安装和配置所有内容后的几天。
如果我重新启动,一切都恢复正常。在“一段时间”之后问题再次出现。
首先,当我尝试启动或重启apache2时:
# apache2ctl start
- OR -
# /etc/init.d/apache2 start
(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
Action 'start' failed.
The Apache error log may have more information.
然后我用netstat检查监听套接字:
# netstat -ltnp | grep ':80'
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 16100/jsvc.exec
tcp6 0 0 :::80 :::* LISTEN 14794/apache2
然后我尝试停止apache2:
# apache2ctl stop
httpd (pid 9124?) not running
- 或 -
# /etc/init.d/apache2 stop
Stopping web server: apache2.
然后我再次运行netstat命令,得到与上面完全相同的结果。甚至PID也没有改变。
当我从netstat中删除PID并再次启动apache2时:
# kill -9 14794
# apache2ctl start
..然后一切都恢复正常。
Netstat在一切恢复正常后:
# netstat -ltnp | grep ':80'
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 16100/jsvc.exec
tcp6 0 0 :::80 :::* LISTEN 16434/apache2
Netstat存在问题,netstat在一切正常后,对我来说似乎没有什么不同。只有PID发生了变化。
“一段时间后”问题再次出现。
我不知道从哪里开始。尝试搜索谷歌,这些论坛,其他论坛,但找不到适合我的解决方案。正如您所看到的,我让服务器重新启动并运行,但问题一再出现。
有什么可能导致这种情况的想法?
我希望我转向正确的论坛。谷歌是我的朋友,大多数关于类似主题的有用建议都来自这个论坛:)
提前感谢您的帮助!
答案 0 :(得分:0)
The Apache error log may have more information.
这看起来像是要开始的地方。
看起来这里有两个问题:1)apache在一段时间后失败,以及2)当发生这种情况时你无法重启Apache。
问题2首先。一种可能性是你有两个Apache安装正在运行,一个正在抓住另一个端口。
或者,Apache正在死亡,重新启动,但没有正确写入其PID文件,所以当你要求它重新启动时,它无法正常自杀。
或者,它正在编写PID文件,但是apache2ctl(或者你正在运行它的用户)对它们没有读取权限(不太可能)。
无论哪种方式,PID文件看起来都是错误的,因为它正在寻找PID 9124,但是Apache正在运行PID 14794.并且鉴于“无法打开日志”,这看起来像是权限。尝试将Apache重新启动为具有对日志和pidfiles的读/写访问权限的人,例如sudo apachectl graceful
,或者将其作为apache用户执行。
如果可以,那么作为一种解决方法,你可以尝试通过root或apache的cron定期运行apache2ctl graceful
- 但这是一个讨厌的,讨厌的kludge。
为了得到更糟糕的东西,这样的事情会让它确定它已经死了并重新启动: apache2ctl graceful || (pkill apache2&& apachectl start)
真正要做的事情是,找到它失败的原因 - 问题1。
我敢打赌,这是PID文件的权限问题:也就是说,在httpd.conf中,你已经要求在一定数量的连接后重新启动连接处理程序( MaxRequestsPerChild设置),但是当它们重新启动时,它们无法写入pid文件来更新它们。这可能导致这种情况。不过,很多其他事情也会如此。
不幸的是,调试会检查PID文件夹和上面所有文件夹的文件权限; apache运行的进程ID和用户(ps -ef | grep -Pi "apache|http"
); pid文件的内容;您正在运行apache2ctl的用户; httpd.conf的内容;以及系统日志的内容。
这比我们在这里调试的要多,但也许你可以通过这些东西搜索相关的东西并发布它们吗?