启动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的较新版本,并希望取得最好的成绩。