page_adsence

2010年7月12日月曜日

Apacheを再起動しようと思ったらエラーになった。

設定ファイルをリロードしようと思って、

# /etc/rc.d/init.d/httpd reload

としたけど、どうせだから再起動するかと思ってapacheの再起動をかけてみたら下記のようなエラーがでた。

# /etc/rc.d/init.d/httpd restart
httpd を起動中: (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番ポート使ってるから、再起動できませんってことみたいです。
なんか他に使うようなことしてたっけかなーと思って確認してみた。
80番と443番ポートをオープンしているプロセスを表示

# lsof -i:80,443
httpd 9326 root 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9326 root 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9328 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9328 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9329 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9329 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9330 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9330 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9331 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9331 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9332 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9332 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9333 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9333 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9334 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9334 apache 6u IPv6 63291 TCP *:https (LISTEN)
httpd 9335 apache 4u IPv6 63286 TCP *:http (LISTEN)
httpd 9335 apache 6u IPv6 63291 TCP *:https (LISTEN)

なんかいっぱいでてきた。
でもこれ全部apacheのプロセスじゃん・・・。
restartする時にちゃんとプロセスが終了しなかったのが原因っぽい。
なぜちゃんとプロセスが終了しなかったのかは今のとこ不明。

対応としてはapacheのプロセスをいったん全部killしてあげる。
killコマンドとはプロセスに対してシグナルを送るコマンド。
このシグナルの中にプロセスを終了させる意味のあるシグナルが含まれている。

# kill 9326

で、プロセスが全部終了しているか確認。

# lsof -i:80,443

何も出なければOK。
apache再起動する。

# /etc/rc.d/init.d/httpd restart

これで問題は解決。
よかったよかった。