1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

はじめに

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を自動起動させる

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?