Webシステム開発 雑記帳 /

Apacheで Address already in use:エラー! ポートが使用中でhttpdの起動に失敗するときの対応方法

Apache を再起動したとき、以下のエラーメッセージが出てしまい、再起動に失敗することがあります。再起動に失敗すると、当然ホームページが見れなくなってしまうわけですから、一刻も早く復旧させなくてはいけません。そこで今回は、「Address already in use:エラー」で Apache が起動したいときの対応方法をご紹介したいと思います。
(98)Address already in use: make_sock: could not bind to address [::]:80 (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
このエラーの原因は、サーバーの予期せぬシャットダウンなどによって、古いプロセスが80や443ポートを使ってしまい、Apacheの起動を妨げてしまっていることで起こります。「80ポートが使えないからApacheが起動できません」ということですね。 対応方法としては、使えない80や443ポートの使用状況を調べ、古いプロセスを切ってしまえば、Apacheを起動することができるようになります。 また、私の経験だと、SSLを導入した環境でApacheの再起動をすると、パスフレーズ入力付近で同様のエラーが起こりました。その場合の対応についても、すでに使われてしまっている80や443ポートの古いプロセスを切ることで対応ができます。

まずは、Apacheの使用状況を確認する

Apacheが停止している状態から、下記のコマンドを使って、使用している80番ポートのプロセスIDを探します。
httpd 1399 apache 4u IPv4 11324 0t0 TCP *:http (LISTEN) httpd 1401 apache 4u IPv4 11324 0t0 TCP *:http (LISTEN)
右から2番目の数字(1399や1401)がプロセスIDになります。 ちなみに、lsofコマンドは、プロセスが使用中のファイルを表示するコマンドです。 lsofコマンドに grep http とパイプさせることで、上記(グレーの囲み)のように、 http で使用しているプロセスのみ表示させることができます。

古いプロセスIDをkillコマンドで強制終了する

上記のlsofコマンドから、古いプロセスIDが悪さをしていることが判明したので、この古いプロセスIDをkillコマンドで強制終了します。 これで、Apache が起動するようになります。

この記事を書いた人

PAGE TOP