理由はわかりませんが、httpd サービスを起動しようとすると、起動しません。
サーバー構成:
OS: CentOS 5.10
PHP: 5.5.7
Apache: 2.2.3
何が起こっているのかを私が知った経緯は次のとおりです。
$ sudo service httpd start
Starting httpd: [ OK ]
$ sudo service httpd status
httpd dead but subsys locked
そこで、httpd の subsys ファイルを削除して再試行しましたが、再び失敗しました。
fcgid を追加するプロセスは次のとおりです。
mod_fcgid をソースからビルドし、/etc/httpd/modules ディレクトリに配置しました。
LoadModule fcgid_module modules/mod_fcgid.so
モジュールのリストに追加しましたLoadModule cgi_module modules/mod_cgi.so
必要ないのでコメントアウトしました。PHP のラッパー スクリプトを作成し、/var/www/cgi-bin に配置しました。
ラッパーを指す PHP のハンドラーを作成しました。
次にhttpdサービスを起動してみます
以下は、/var/log/httpd/error_log に表示されるエラーです。
[Mon Dec 16 12:18:26 2013] [notice] SELinux policy enabled; httpd running as context user_u:system_r:httpd_t:s0
[Mon Dec 16 12:18:26 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Dec 16 12:18:26 2013] [notice] SSL FIPS mode disabled
[Mon Dec 16 12:18:26 2013] [notice] Digest: generating secret for digest authentication ...
[Mon Dec 16 12:18:26 2013] [notice] Digest: done
[Mon Dec 16 12:18:26 2013] [emerg] (17)File exists: mod_fcgid: Can't create shared memory for size 1200712 bytes
「ファイルが存在します」と表示されていますが、名前に「fcgi」が含まれる追加ファイルをあらゆる場所で検索しましたが、何も見つかりません。
これが権限の問題なのか、SELinux の問題なのか、あるいは suEXEC の問題なのかはわかりません。
どこから検索を始めればよいのかさえわからないので、ご指導いただければ幸いです。
もう一度試してみたところ、今度はエラーが少し異なっていました。
[Mon Dec 16 12:50:23 2013] [emerg] (13)Permission denied: mod_fcgid: Can't create shared memory for size 1200712 bytes
どのフォルダまたはファイルの所有権を変更する必要があるかわかりません。
SELinux を設定するpermissive
と、問題なくプロセスを開始できるようになりましたが、SELinux をそのままにしておくことはしたくありません。SELinux で Apache、fcgid、PHP を連携させる方法について、別の質問をします。
答え1
テストの一環としてSELinux
、これを無効にして、それが問題の原因かどうかを確認してください。
[alexus@XXXXXXXXXX ~]$ getenforce
Enforcing
[alexus@XXXXXXXXXX ~]$ sudo setenforce 0
[alexus@XXXXXXXXXX ~]$ getenforce
Permissive
[alexus@XXXXXXXXXX ~]$
また、ひょっとすると chroot として実行しているのでしょうか? FreeBSD 時代にも同様の問題がありましたが、それは jail/chroot に関連していました。