apache .htaccess

Apache

(98)Address already in use: と出てapacheが再起動できない場合の対策

2018/05/11

apache の設定を行い再起動しようとすると、Address already in use というエラーが出ました。
調べてみると、他のプロセスが80番ポートを占有しているからとのこと。

再起動できないってのは都合がわるいので、その対策です。

Address already in use: 対策

再起動失敗とエラー内容

[default]
# /etc/init.d/httpd graceful

httpd not running, trying to start
(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
[/default]

他のプロセスが80番ポートを使用しているために apache がポートを使えないために起こるエラーらしい。

調査

ポートを使用しているプロセスの確認。

[default]
sudo lsof -i | grep http

httpd 21746 root 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21767 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21768 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21769 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21770 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21771 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21775 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21778 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21779 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21780 daemon 3u IPv4 747509 TCP *:http (LISTEN)
httpd 21781 daemon 3u IPv4 747509 TCP *:http (LISTEN)
[/default]

プロセスID:21746 ~ 21781までが apache を使っています。

プロセス停止、再起動

ということで、該当するプロセスを停止させます。

[default]
sudo kill -9 21746
sudo kill -9 21767
sudo kill -9 21768
sudo kill -9 21769
sudo kill -9 21770
sudo kill -9 21771
sudo kill -9 21775
sudo kill -9 21778
sudo kill -9 21779
sudo kill -9 21780
sudo kill -9 21781
[/default]

この状態で再度調査(sudo lsof -i | grep http)すると、何も出ません。
ちなみに、apache が停止しているので、ブラウザでアクセスすると当然ながら「404エラー」が出ます。

再起動したいだけなのになぁ…

最後に起動
[default]
/usr/local/apache2/bin/apachectl start
[/default]

これで再び起動するはずです。

なお、原因は『httpdが異常終了する等して古いhttpdプロセスが残っていること』とのことですが、手元にある(実験用)サーバは毎回この状態で、何故そうなるのかは現状ではまだわかりません。

もうちょっと探る必要があるかな…。

(おまけ)apacheの再起動コマンドについて

[default]
/etc/init.d/httpd restart
[/default]

↑ クライアントと接続中の httpd プロセスを停止してしまうため、クライアントとの通信が強制的に切断してしまう

[default]
/etc/init.d/httpd graceful
[/default]

↑ graceful はすべてのクライアントとの通信が終了するまで再起動しません
Webサーバなどを公開していて、httpdサービスの停止が出来ない場合はかなり効果的。

参考サイト

-Apache
-, ,