Pocket

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 が起動するようになります。

 

スタッフ募集のお知らせ

株式会社それからデザインでは現在、エンジニア・プログラマー、デザイナー、ディレクターを募集しています。自社サービスやクライアント企業のブランディングに関わるモノづくりの現場であなたの経験を活かしてみませんか?
ご興味のある方は、下記より募集要項をご覧ください。

生きるように働く人の仕事探しサイト「日本仕事百貨」に、当社のSE・プログラマー募集の記事が掲載されました。是非ご覧ください。