Apache2 崩溃

Apache2 崩溃

在我的开发服务器上。 apache2 经常会崩溃。 它不再作为进程运行。

服务器详细信息:Linux Debian etch Apache2

# ps aux | grep apache
www-data  6782 99.9  0.2   4792  2912 ?        R    Oct12 8592:53 /usr/sbin/apache/log
root     22418  0.0  0.0   2852   704 pts/2    S+   13:31   0:00 grep apache

# apache2ctl restart
httpd not running, trying to 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

当我检查 /var/log/apach2/error.log 时,里面什么都没有。

我想做两件事。

  1. 找出 Apache 崩溃的原因并修复它

  2. 配置在哪里是必要的以便它不会再次发生并且也许设置日志文件更好?

如果我重新启动机器,我就可以让 apache 重新启动并运行。有人能解释一下这里发生了什么吗?

谢谢,德里克

答案1

恐怕你已被黑客入侵。我会运行一个工具来检查 root kit 并查找任何恶意 php 脚本。检查 /tmp 中是否有任何奇怪的文件或脚本。我认为 debian 在 apt 存储库中有 rkhunter。祝你好运。

答案2

我要做的第一件事是查找 /usr/sbin/apache/log 文件,看看它到底是什么。它看起来很奇怪。即使它看起来像一个有效的二进制文件,也请尝试“strings /usr/sbin/apache/log | less”,以查找任何可疑内容。

据我所知,ps 应该会在那里显示执行的命令,并且不应该存在像 /usr/sbin/*/log 这样的命令。在我的系统 (ubuntu) 上,ps 会在那里列出 /usr/sbin/apache2。我也经常使用 debian,据我所知,Debian 上的设置是相同的。另外,检查“pgrep -l apache”的输出。

如果您发现正在发生一些正常的事情(即您的服务器没有被黑客入侵),那么您可以尝试确保您没有运行与某些模块(尤其是 php)不兼容的多线程 mpm。此外,请检查磁盘空间、权限等。如果日志文件无法访问,Apache 确实会放弃并崩溃,但这通常在启动时发生。直到稍后才打开的文件也可能会发生类似的事情(虽然我想不出这些文件是什么 --- htaccess 和密码文件应该可以正常失败)。

答案3

看起来 pid 6782 是一个 apache 进程,那么您认为它为什么没有运行呢?该进程可能保持端口 80 处于打开状态,这就是您无法启动新进程的原因。

我敢打赌,导致它停止运行的原因是它在旋转日志文件时发生的“重新启动”。但您不会知道,直到它再次发生,并且您可以获得真正的“ps”输出以及卡住进程的“strace”或“truss”。

答案4

我唯一一次看到这种情况是在网络接口未配置且 apache 启动但自行挂起时。如果您的系统配置为通过 DHCP 分配 IP,这可能是一个弱点。当然,如果您通过 ssh 进入 apache 监听的同一接口,那么这不是问题!

也许可以通过以下方式找出正在监听端口 80 的内容:

lsof -Pni | grep ":80 "

相关内容