coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

apache httpd 2.4.2 mod_cgid のソケットについて

2012-07-13 23:10:42 | Apache httpd
前回、apache httpd 2.4.2 を利用していて、mod_cgi が mod_cgid に変更になっていた(2.2.4では、Makefile を作成する configure のデフォルトが --enable-cgi で、 --enable-cgid がオプションでした。)ことに気が付いたので、古い 2.2.4 とちょっと比較しました。

インストールした /usr/local/httpd242 ディレクトリの下は、APRが独立したので lib ディレクトリが無くなった他にはディレクトリ構成は変わりませんが、ほとんどの機能がモジュール化(Apache で 動的共有オブジェクト Dynamic Shared Objeect (DSO) サポートと httpd.conf の中でコメントされています。)されて、modules ディレクトリの下に多数置かれるようになりました。httpd.conf の中で、 LoadModule ディレクティブによってこれらのモジュールを使うか使わないかを指定するので、これらを示すリストのようになっています。

さて、mod_cgid に戻って、それが使うソケット(logs/cgisock.*)に関して気が付いた点を示します。

まず、ソケットの作成権限が無い場合のエラーです。

$ ls /usr/local/httpd242/logs
access_log error_log
$
$ /usr/local/httpd242/bin/apachectl start
(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
$

これは、ソケット作成権限を持つ、例えば root で行えば以下のように解決します。

# ls /usr/local/httpd242/logs
access_log error_log
#
# /usr/local/httpd242/bin/apachectl start
#
# ls /usr/local/httpd242/logs
access_log cgisock.1715 error_log httpd.pid
#

このように新しいソケットが作成されます。ここでリスタートしてみます。
(ps コマンドの出力は少し縮めてあります。)
# ps -ef |grep httpd
root   1715     1  0 xx:08 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1896  1715  0 xx:12 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1897  1715  0 xx:12 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1898  1715  0 xx:12 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1899  1715  0 xx:12 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
root   1984  1710  0 xx:14 pts/0 00:00:00 grep httpd
#
# /usr/local/httpd242/bin/apachectl restart
#
# ps -ef |grep httpd
root   1715     1  0 xx:08 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1988  1715  0 xx:14 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1989  1715  0 xx:14 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1990  1715  0 xx:14 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
daemon 1991  1715  0 xx:14 ?     00:00:00 /usr/local/httpd242/bin/httpd -k start
root   2074  1710  0 xx:14 pts/0 00:00:00 grep httpd
#
# ls /usr/local/httpd242/logs
access_log  cgisock.1715  error_log  httpd.pid
#

このようにリスタートすると親プロセスは残って、子プロセスだけを立ち上げ直しています。つまり、先ほど作成したソケットは再利用されます。

ここで、httpd を終了してみます。

# /usr/local/httpd242/bin/apachectl stop
#
# ps -ef |grep httpd
root 2079 1710 0 xx:20 pts/0 00:00:00 grep httpd
#
# ls /usr/local/httpd242/logs/
access_log error_log
#

全てのプロセスが終了し、ソケットも消去されます。

もし、何らかの理由で(今回の例は、Windowsをアップデートしたら再起動して、coLinux が強制終了したときのものです。)ソケットが消去できなかった場合は、

# ls /usr/local/httpd242/logs
access_log cgisock.1731 error_log httpd.pid
#
# /usr/local/httpd242/bin/apachectl start
#
# ls /usr/local/httpd242/logs
access_log cgisock.1715 cgisock.1731 error_log httpd.pid
#

のように、残ってしまった、cgisock.1731 はそのままで、新しいソケットが作成されます。その場合は、消しておく必要があります。

# rm /usr/local/httpd242/logs/cgisock.1731

注意したい点です。httpd.pid は、毎回作成されますのでそのままで問題ないのは従来どおりです。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« apache httpd 2.4.2 の mod_s... | トップ | Raspberry Pi »
最新の画像もっと見る

コメントを投稿

Apache httpd」カテゴリの最新記事