我制作了一个运行一个网站的私有 Amazon EC2 映像,然后开始安装 redmine。完成所有安装后,即将重新启动 Apache 时,我遇到了以下问题(抱歉,您可能需要放大才能看到屏幕截图):
我对所发生情况的理解是,apache2 没有运行,但它正在监听端口 80。然后我尝试: 这给出了同样令人困惑但一致的结论,apache2 没有运行,但我确信是进程 18304,即 apache2 正在监听端口 80。最后,我不得不终止该进程并重新启动 apache,这样就成功了。有人能向我解释一下是什么原因造成的,并给出解决方法吗?
更新1:
下列的合成器patel建议使用lsof。 这和之前的问题完全一样,只是流程不同。
答案1
有时当您停止 apache(或任何其他程序)时,脚本无法正确关闭程序,因为它在等待某些东西(例如 IO),但删除了 pid 文件。因此,脚本认为 apache 没有运行,因为没有 pid 文件,但 apache 正在运行,或者有时没有真正运行,而是卡在端口上。
在这些情况下,您必须终止进程,然后才能启动程序。我见过很多这种类型的卡住进程,来自 apache、slapd、cirus……有时会发生这种情况。
答案2
尝试运行
lsof -n | grep TCP
此外.. apache2 控制器并不总是最可靠的,它只检查 PID 文件,而不是实际进程。
ps -aef | grep httpd
$1 表示您仍有 httpd 正在运行。
答案3
正如上面的海报所说,使用
lsof -n | grep TCP
或者
lsof -n | grep "*:www"
此外,在 Ubuntu 中,它使用进程名称“apache2”,因此您应该使用以下命令进行检查:
ps -ax |grep apache
而不是 grep httpd
答案4
跑步
ps aux|grep apache
你有看到
/usr/share/apache2/ask-for-passphrase localhost:443 RSA
如果是这样
其中一个站点包含带密码的 SSL 证书。因此,当 Apache 尝试在系统启动时启动时,如果没有人手动输入密码,它就无法继续。
因此,您有两个选择来解决这个问题:
添加SSLPassPhrase对话框指令到您的配置。
删除你的密码(安全性较低)