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が起動してハングするため、そうではありません。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 を入手して、最善を尽くすことだと思います。