Help us understand the problem. What is going on with this article?

Cent OS 6.9 でapacheをソースからインストールすると $service httpd status で「httpd dead but subsys locked」と表示された

More than 1 year has passed since last update.

はじめに

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

コンテナへコピーするファイルは,以下のような修正を加えた.

/etc/usr/local/lib/php.ini
# 変更前
;date.timezone =

# 変更後
date.timezone = "Asia/Tokyo"
/usr/local/src/apache2/conf/httpd.conf
# 以下を追加
ServerName www.hoge.hoge:80

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

/usr/local/src/httpd-2.2.15/build/rpm/httpd.init
# 変更前
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 オプションが無い.
これが,今回の問題に関わっていると推察した.

/etc/init.d/httpd
  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を自動起動させる

m_fuji
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした