启动 apache2 时,我在全新安装 Ubuntu 12.10 时遇到此错误。
这是apache2中的一个错误。它被挂在后台。这是我对软件中可能存在错误的位置的演练。
这是我得到的错误:
el@titan:~$ sudo service apache2 start
* Starting web server apache2
(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.
[fail]
地址已在使用中?它可以用来做什么?看看这个:
el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:# supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf: Listen 443
/etc/apache2/ports.conf: Listen 443
这意味着 apache2 正在阻止 apache2 启动。奇怪。这将确认:
el@titan:~$ ps -ef | grep apache2
root 1146 954 0 15:51 ? 00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root 1172 1146 0 15:51 ? 00:00:00 /bin/sh /usr/sbin/apache2ctl start
root 1181 1172 0 15:51 ? 00:00:00 /usr/sbin/apache2 -k start
root 1193 1181 0 15:51 ? 00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el 5439 5326 0 16:23 pts/2 00:00:00 grep --color=auto apache2
是的,在这种情况下 apache2 正在运行,我试图在同一个端口上第二次启动 apache2。
让我感到困惑的是,service
报告 apache2 没有运行:
el@titan:~$ sudo service apache2 status
Apache2 is NOT running.
当您查询 apache2ctl 的状态时,它会挂起。
root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.
所以 Ubuntu 在启动时似乎无法管理 apache2。是时候停止 apache2:
root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running
一个大线索!您尝试停止 apache2 并且它丢失了进程 ID!所以Ubuntu无法阻止apache2,因为它不知道它在哪里!
您会认为重新启动会修复它,但这不是因为 apache2 在启动时启动并挂起。apache2 的正常启动过程无法正常工作。
那么如何解决呢?
我能够通过分析ps
命令输出来解决这个问题。请注意,该ps
命令告诉我们该进程是由“/etc/rc2.d/S91apache2 start”启动的。
那是需要快速踢的违规程序。
/etc/rc2.d/S91apache2
是用于在计算机启动时为您启动 apache2 的符号链接。由于某种原因,它似乎正在启动 apache2 然后挂起。所以我们必须告诉它不要那样做。
所以去看看那个/etc/rc2.d/S91apache2
。
el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx 1 root root 17 Nov 7 21:45 S91apache2 -> ../init.d/apache2*
这是一个我们不希望它存在的符号链接。这样做可以防止 apache2 在启动时启动:
root@titan:~# sudo update-rc.d -f apache2 remove
Removing any system startup links for /etc/init.d/apache2 ...
/etc/rc0.d/K09apache2
/etc/rc1.d/K09apache2
/etc/rc2.d/S91apache2
/etc/rc3.d/S91apache2
/etc/rc4.d/S91apache2
/etc/rc5.d/S91apache2
/etc/rc6.d/K09apache2
重新启动计算机以确保 apache2 不会启动并挂起。好的好的。现在您可以将 apache2 恢复原状,但这会使它再次失败。
root@titan:~$ sudo update-rc.d apache2 defaults //(don't do this)
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K20apache2 -> ../init.d/apache2
/etc/rc1.d/K20apache2 -> ../init.d/apache2
/etc/rc6.d/K20apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache2
相反,像这样启动 apache2:
sudo service apache2 start
并且 apache2 已备份并再次提供页面。apache2/Ubuntu 12.10 似乎存在一些严重的错误,导致 apache2 启动并挂起。这是一种解决方法,我想解决方法是获取更新版本的 apache2 和 Ubuntu,并希望获得最好的结果。