はじめに
apache をソースからインストール後,
httpd を起動してステータスを表示したら何かがおかしい.
この問題に対する作業記録を備忘録としての意味も込めて残したいと思います.
環境
-
OS: Cent 6.9
OSX 10.13.3 上で動く Dockerコンテナ
(イメージのリポジトリとタグ:centos,centos6) -
Apache: 2.2.15
-
php: 5.3.3
問題の内容
以下のように, httpd 起動時のメッセージは正常であるが, 起動後の status を確認すると
httpd dead but subsys locked
と表示されてしまう.
$ service httpd start
Starting httpd: [ OK ]
$ service httpd status
httpd dead but subsys locked
問題が発生するまでの環境構築手順
以下の Dockerfile を用いて環境を構築した.
FROM centos:centos6
# 必要なライブラリ等をインストール
RUN yum -y update
RUN yum -y install vim wget gcc autoconf automake libtool re2c libxml2-devel mysql-devel initscripts lynx
RUN wget -P /usr/local/src http://archive.apache.org/dist/httpd/httpd-2.2.15.tar.gz ;\
tar --directory /usr/local/src -xf /usr/local/src/httpd-2.2.15.tar.gz ;\
wget -P /usr/local/src/ http://museum.php.net/php5/php-5.3.3.tar.gz ;\
tar --directory /usr/local/src -xf /usr/local/src/php-5.3.3.tar.gz ;
RUN wget -P /var/tmp http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm ;\
rpm -ivh /var/tmp/epel-release-6-8.noarch.rpm
# apache, php のインストール
RUN cd /usr/local/src/httpd-2.2.15/ ;\
./configure --enable-so --prefix=/usr/local/apache2 && make && make install
RUN cd /usr/local/src/php-5.3.3/ ;\
./configure --prefix=/usr/local --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-libdir=lib64 && make && make install ;\
cd
# 事前に用意した,設定ファイルをコンテナへ追加 (事前にホスト上にコピーしておいた設定ファイルをコンテナにコピー)
## php.ini : from /etc/usr/local/lib/php.ini
## httpd.conf : from /usr/local/src/apache2/conf/httpd.conf
## httpd : from /usr/local/src/httpd-2.2.15/build/rpm/httpd.init
ADD ./php.ini /usr/local/lib/
ADD ./httpd.conf /usr/local/apache2/conf/
ADD ./httpd ./etc/init.d/
# httpd を起動スクリプトに登録
RUN chkconfig --add httpd ;\
chkconfig httpd on
コンテナへコピーするファイルは,以下のような修正を加えた.
# 変更前
;date.timezone =
# 変更後
date.timezone = "Asia/Tokyo"
# 以下を追加
ServerName www.hoge.hoge:80
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
# 変更前
httpd=${HTTPD-/usr/sbin/httpd}
pidfile=${PIDFILE-/var/run/${prog}.pid}
CONFFILE=/etc/httpd/conf/httpd.conf
# 変更後
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
CONFFILE=/usr/local/apache2/conf/httpd.conf
問題の対処方法
結論としては, 以下に含まれる else 直後の一行を status $httpd
に変えれば良い.
status コマンドのヘルプを表示すると p オプションが無い.
これが,今回の問題に関わっていると推察した.
status)
if ! test -f ${pidfile}; then
echo $prog is stopped
RETVAL=3
else
status -p {$pidfile} $httpd # → status $httpd
RETVAL=$?
fi
;;
参考:https://gist.github.com/vittee/7262943 の L.66
修正後,再度コマンドを叩いていみる.
$ service httpd start
Starting httpd: [ OK ]
$ service httpd status
httpd (pid 32) is running...
これで,問題の表示がでなくなった.
参考
PHP公式リファレンス: Apache 2.x (Unixシステム用)
Apache公式リファレンス:コンパイルとインストール
Linux(CentOS)のApache HTTP Serverを自動起動させる