apache2 无法在 ubuntu 9.10 服务器上启动--为什么?

apache2 无法在 ubuntu 9.10 服务器上启动--为什么?

我的问题有三个:
1)我如何弄清楚这里到底发生了什么,
2)我如何防止它再次发生,
3)如果再次发生,我可以配置 Monit 来检测并重新启动服务器吗?

事情是这样的:

我托管在 Ubuntu 9.10 RackSpace 云服务器上的 apache2 服务器今天早上宕机了 - 并且重启失败[是的,我应该启动 - 但是如果没有服务器需要停止,重启就会退回到启动,所以这应该没关系] 如下:

user@host: sudo /etc/init.d/apache2 restart
* Restarting web server apache2                                                                                                                                                        
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80 
no listening sockets available, shutting down 
Unable to open logs

谷歌来帮忙了:我按照这篇文章中的说明操作http://www.linuxquestions.org/questions/linux-newbie-8/could-not-bind-to-address-0-0-0-0-80-a-405377/#post3516504

for i in `ps auwx | grep -i nobody | awk {'print $2'}`; do kill -9 $i; done

并且启动时没有错误。所以,现在我已修复,但需要了解更多信息。

编辑:刚刚看到这个:Apache2 崩溃——希望这不是同一件事。

编辑:到目前为止一切顺利--rootkit检查没有问题--

答案1

我在使用各种初始化脚本时遇到过三种情况。

user@host 有关闭 apache2 的权限,但 apache 在端口 80 上运行,需要 root 才能启动。使用 sudo 重新启动 apache2。但是 user@root 应该能够重新加载 apache2。

如果 user@host 可以启动 apache2,那么您可能遇到了时间问题,即 apache 尝试在所有子进程退出之前启动。可以使用 Reload 应用许多配置更改,并且不需要在启动新服务器之前退出旧子进程。请参阅 的文档apachectl graceful

当服务器已运行时,PID 文件通过运行 start 更改为不同的 PID。Stop 尝试从 PID 文件中停止进程,但由于无法获取旧进程使用的资源,因此进程不再运行。

答案2

关于问题

您收到的错误意味着 apache 无法启动使用端口 80,因为该端口正被另一个应用程序使用。

现在讨论您的解决方案:

for i in `ps auwx | grep -i nobody | awk {'print $2'}`; do kill -9 $i; done

该命令查看所有正在运行的进程 ( ps auxw) 并查找包含“nobody”的列表项 ( grep -i nobody)。该-i参数确保过滤器不区分大小写。

awk {'print $2'}将输出限制到第二列。

最后do kill -9 $i用信号 9(KILL)杀死剩余的进程

答案3

如果你需要知道端口上运行着什么

fuser 80/tcp

这将输出端口上运行的应用程序的 pid

相关内容