Apache を再起動したとき、以下のエラーメッセージが出てしまい、再起動に失敗することがあります。再起動に失敗すると、当然ホームページが見れなくなってしまうわけですから、一刻も早く復旧させなくてはいけません。そこで今回は、「Address already in use:エラー」で Apache が起動したいときの対応方法をご紹介したいと思います。
このエラーの原因は、サーバーの予期せぬシャットダウンなどによって、古いプロセスが80や443ポートを使ってしまい、Apacheの起動を妨げてしまっていることで起こります。「80ポートが使えないからApacheが起動できません」ということですね。
対応方法としては、使えない80や443ポートの使用状況を調べ、古いプロセスを切ってしまえば、Apacheを起動することができるようになります。
また、私の経験だと、SSLを導入した環境でApacheの再起動をすると、パスフレーズ入力付近で同様のエラーが起こりました。その場合の対応についても、すでに使われてしまっている80や443ポートの古いプロセスを切ることで対応ができます。
まずは、Apacheの使用状況を確認する
Apacheが停止している状態から、下記のコマンドを使って、使用している80番ポートのプロセスIDを探します。
1 |
/usr/sbin/lsof -i | grep httpd |
右から2番目の数字(1399や1401)がプロセスIDになります。
ちなみに、lsofコマンドは、プロセスが使用中のファイルを表示するコマンドです。
lsofコマンドに grep http とパイプさせることで、上記(グレーの囲み)のように、 http で使用しているプロセスのみ表示させることができます。
古いプロセスIDをkillコマンドで強制終了する
上記のlsofコマンドから、古いプロセスIDが悪さをしていることが判明したので、この古いプロセスIDをkillコマンドで強制終了します。
1 2 |
kill -9 1399 kill -9 1401 |
これで、Apache が起動するようになります。
1 2 |
# service httpd start; Starting httpd: [ OK ] |