web-dev-qa-db-ja.com

Apacheが起動に失敗し、アドレスはすでに使用されています(実際にはそうではありません)

Ubuntu 12.04を実行するVMをセットアップしようとしています。ポート80を使用して2つの仮想ホストを構成していますが、Apacheは起動しません。

私はこのエラーを受け取ります:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

netstat -tulpnの出力は、ポート80を使用しているものがないことを示しています。これが原因である可能性があるものは何ですか?

58
Gunner Barnes

私はそれを理解しました。 httpd.confとports.confの両方でListen 80コマンドが重複していた

また、仮想化されているサーバーの構成ファイルをコピーする際に、エラーログディレクトリが変更されたことに気づかなかった。そのエラーログを調べると、mime.types構成ファイルのディレクトリがhttpd.confファイル内で間違っていることに気付きました。そのパラメーターを更新すると、サーバーは正常に起動しました。

4
Gunner Barnes

.confファイルでListen 80を2回宣言していないことを確認してください。

たとえば、ports.confとinn sites-enabled/www.confの両方にあるかもしれません。

調べるには、grep -ri listen /etc/Apache2を使用します

Listen 80を1か所に保管してください。

38
ravi

この問題を解決した方法に答えます。将来誰かに役立つかもしれません。

netstat -ltnp | grep :80を試してください

これは次のようなものを返します

tcp6 0 0 ::: 80 ::: * LISTEN 1047/Apache2

次に実行する

Sudo kill -9 1047

1047は、ポート80で実行されているプログラムのpidです。netstatから取得したpidを置き換えることができます。

18

この問題が発生したとき、証明書にパスワードを入力する必要のあるSSLサイトがあるために、Apacheが起動時に起動できなかったことが判明しました。

これがあなたに当てはまるかどうかを判断する良い方法は、ps -ef | grep Apacheを実行することです。これにより、/bin/bash /usr/share/Apache2/ask-for-passphrase mysite.com:443 RSAのようなプロセスが返された場合、絶対に端末にパスワードが入力されるのを待ちます見る。

まず、ハングしたプロセスを強制終了しました(/ usr/sbin/Apache2プロセスのプロセスIDにkill -HUPを送信すると、他のプロセスも強制終了できますが、確認のために別のps -ef | grep Apacheを実行します)。

それから この投稿 の指示に従って、パスワードの入力を必要としないSSLパスワードファイルを作成しました。その後、service Apache2 startは正常に動作し、Apacheは再起動後に適切に起動しました。

13
Brendan Quinn

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」によって開始されたことを示していることに注意してください。

これは、Swiftキックを必要とする問題のあるプログラムです。

/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が起動およびハングしないことを確認します。 Ok良い。これで、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の新しいバージョンを取得し、最善を期待することだと思います。

10
Eric Leschinski

AWS EC2サーバーでリッスンしているNginxサーバーがありました。EC2を構築しているときに設定されたと思うので、Address in useエラーが発生しました。そこで、サービスを停止し、Apache2サービスを開始しました。

Sudo service nginx stop
Sudo service Apache2 start
9
Dodger

おそらくNATネットワークでVirtualBoxを実行している人のためのヒントです。ゲストとホスト間にNATルールが設定され、ポートがバインドされていることがわかりました

2
mschr

の言及を複製するだけではありません

Listen 80

listen 80に加えてこれについても言及

Include ports.conf
2
Scott Stensland

これは、ポート80がすでに使用されていることを意味します。編集して、Apache2のポートを変更します(推奨しません)。

/etc/Apache2/ports.conf

または、ポート80で実行されているアプリケーションを閉じます。

netstat -antp | grep 80

ポート80で実行されているものを見つける。

2
Dylan Dodds