質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

Miracle Linuxでsystemdからhttpdが起動しない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,183

ynakano

score 1848

お世話になっております。
標記の件でお知恵を貸してください。

Miracle Linuxサーバがあるのですが、systemdで自動起動設定がなされているhttpdが起動しない状況です。
起動エラーを確認すると以下のメッセージが出力されます。

[root@<hostname> ~]# systemctl -l status httpd-24-httpd
● httpd24-httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd24-httpd.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 月 2016-09-12 15:33:46 JST; 21min ago
  Process: 11043 ExecStop=<httpd_dir>/usr/sbin/httpd-scl-wrapper $OPTIONS -k graceful-stop (code=exited, status=226/NAMESPACE)
  Process: 11041 ExecStart=<httpd_dir>/usr/sbin/httpd-scl-wrapper $OPTIONS -DFOREGROUND (code=exited, status=226/NAMESPACE)
 Main PID: 11041 (code=exited, status=226/NAMESPACE)

 912 15:33:46 <hostname> systemd[1]: Starting The Apache HTTP Server...
 912 15:33:46 <hostname> systemd[11041]: Failed at step NAMESPACE spawning <httpd_dir>/usr/sbin/httpd-scl-wrapper: Bad address
 912 15:33:46 <hostname> systemd[1]: httpd24-httpd.service: main process exited, code=exited, status=226/NAMESPACE
 912 15:33:46 <hostname> systemd[1]: httpd24-httpd.service: control process exited, code=exited status=226
 912 15:33:46 <hostname> systemd[1]: Failed to start The Apache HTTP Server.
 912 15:33:46 <hostname> systemd[1]: Unit httpd24-httpd.service entered failed state.
 912 15:33:46 <hostname> systemd[1]: httpd24-httpd.service failed


ただ、このサーバで"/usr/lib/systemd/system"配下の"httpd24-httpd.service"ファイルを

PrivateTmp=false

とすると起動します。(というか起動してしまいます)

unameコマンドの結果は以下の通りです。

Linux <hostname> 3.10.0-327-13.1.el7.x86_64 #1 SMP

ついては以下の点についてご教授いただけませんでしょうか。

・なぜ"PrivateTmp=false"で起動するのか。
・"PrivateTmp=true"で起動させるにはどうしたらよいのか。

私のところに構築経緯が不明(構築担当者が急にいなくなった)で引き渡されたサーバなのですが、「動けばいいじゃん」という訳にもいかない状況です。
また、いつの話か不明ですが以前は"PrivateTmp=true"でhttpdが起動していました。
(その時のpsコマンドのログで確認)

以上、よろしくお願いいたします。


ご指摘の点、補足します。

・"/tmp"、"/var/tmp"ともに「drwxrwxrwt. root:root」です。
・"/var/log/messages"には先に記載した内容と同じものしか出力されていません。また、error_logは記載なしです。(access_logも)
・"/tmp"、"/var/tmp"ともhttpd関連のファイルがあったり、リモートマウントはしていません。

よろしくお願いします。


さらに補足します。

・"/tmp"、"/var/tmp"を作り直してchmod 1777しても状況は変わらず。
・"systemctl reboot"をした時だけサーバ起動と共にhttpd起動。


今日(9/15)になって色々と(詳しく書けませんが)いじっていたところ、error_logが出力するようになりました。

[Thu Sep 15 16:51:06.350678 2016] [auth_digest:notice] [pid 1398] AH01757: generating secret for digest authentication ...
[Thu Sep 15 16:51:06.350723 2016] [auth_digest:error] [pid 1398] (17)File exists: AH01762: Failed to create shared memory segment on file <httpd_dir>/var/run/httpd/authdigest_shm.1398
[Thu Sep 15 16:51:06.350732 2016] [auth_digest:error] [pid 1398] (17)File exists: AH01760: failed to initialize shm - all nonce-count checking, one-time nonces, and MD5-sess algorithm disabled
[Thu Sep 15 16:51:06.350737 2016] [:emerg] [pid 1398] AH00020: Configuration Failed, exiting


サーバを再起動するとhttpdが起動したりしなかったりですが、起動しないケースにおいて上記のメッセージが出力されます。
(httpdが立ち上がらない=上記メッセージ、でもないのですが)

メッセージについて調べてはみたものの、これという決め手に欠いている状況です。
この"shm"ファイルを削除すればよいのか、そもそもこのファイルが何なのか(バイナリのようですが)というのも気になります。
また、当該サーバは仮想基盤というのは何か影響するものでしょうか。
仮想基盤については某クラウド業者のもので、vmwareらしい、くらいしか情報がありません。

有識者のお知恵を拝借できればと思う次第です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • popobot

    2016/09/13 10:32 編集

    /tmpと/var/tmpの権限とかがおかしいんですかね... 以下の結果が見てみたいです。
    ls -lt /var | grep tmp; ls -lt / | grep tmp;

    キャンセル

  • TaichiYanagiya

    2016/09/13 16:52

    httpd24-httpd 起動時に、/var/log/messages や error_log (/var/log/httpd24/error_log?)にエラーが出ていませんでしょうか。
    また、/tmp, /var/tmp に httpd24-httpd が利用するファイルを置いたり、リモートファイルシステムなどをマウントしたりしていないでしょうか。

    キャンセル

回答 2

+1

PrivateTmp=true の場合、新たに空のディレクトリを作成し、/tmp, /var/tmp に bind mount します。
エラーメッセージで検索すると、systemd のバージョンによっては、/tmp, /var/tmp がシンボリックリンクだと bind mount に失敗する事例が見つかりました。
しかし、ynakano さんの環境では通常のディレクトリですので、違うようです。

The latest victim of systemd's PrivateTmp
(Bad address ではなく Operation not permitted)

bind mount した後、何らかの操作で EFAULT (Bad address) になっているのかもしれません。
systemd を strace すると何かわかるかも。

# strace -f -p 1 -o strace.log &
# systemctl start httpd24-httpd
# kill %1
# grep -A 2 /tmp strace.log
# grep -A 2 -E 'EFAULT|Bad address' strace.log

(2016/09/18 01:18) 追記  

結局、PrivateTmp={true|false} の違いではなく、OS起動時に httpd24-httpd が起動しないということだったのですね。
systemd-tmpfiles(8), tmpfiles.d(5) で OS起動時に <httpd_dir>/var/run/httpd/authdigest_shm.* を削除するといいと思います。

/etc/tmpfiles.d/httpd24-httpd.conf (<httpd_dir> は実際のパスに置き換えてください)

r <httpd_dir>/var/run/httpd/authdigest_shm.*

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/14 13:39

    straceコマンドが入ってないようです。
    "find / -name strace"で引っかからないので...

    キャンセル

  • 2016/09/14 21:56

    sudo yum install strace とかでインストールできますよ

    キャンセル

  • 2016/09/14 21:59

    色々と縛りがあって追加インストールはNGなんです。

    キャンセル

check解決した方法

0

根本的ではないのですが、ワークアラウンドとして成立すると思うので下記内容で自己解決とさせてください。

【"<httpd_dir>/var/run/httpd/"配下の"authdigest_shm.<pid>"を削除する】

順を追って記載します。

本件質問の一番最初の事象ですが、サーバを(再)起動した時に自動起動設定のはずのhttpdが起動しないので"systemctl star httpd24-httpd.service"をした時に発生したものです。
ですので本当はサーバ起動時にhttpdが起動しないことを疑問に思うべきでした。

遅まきながらその事に気付き調査した結果、(おそらくOS停止処理の問題で)"httpd.pid"や"authdigest_shm.<pid>"が残ってしまうことが発覚しました。
先に書いた通り、ある日突然私の手元に来たサーバだったので経緯は不明瞭ですが、"authdigest_shm.<pid>"が20個近くある状態でした。
それらのファイル名のPIDを見ると1300番台後半のものばかりでした。
9/15に補足記述したログにはPID=1398とありますが、このサーバの起動シーケンス的にhttpdには1300番台後半から1400番台前半のpidが割り当てられるようです。

9/15に追記したログの内容から、残存したauthdigestファイルのPIDとサーバ起動時にhttpdに付与されたpidが衝突し、"authdigest_shm.<pid>"が既に存在するのでhttpd起動NGになったのであろうと考えました。

裏付けとして"authdigest_shm.1300~1399"を作成してサーバ再起動を繰り返したところ、httpdに割り当てられたpidが1300番台のときは起動に失敗し、1400番台のときは起動に成功することを複数回確認しました。
※今回業務上の都合でサーバ自体の停止と起動を繰り返しています。

その後authdigestファイルを削除のうえサーバの再起動を繰り返したところ、OSの起動とともにhttpdも起動することを確認しました。
数回httpdが起動しないことがありましたが、そのケースにおいては100%の確率でauthdigestファイル名のPIDとhttpdに割り当てられたpidが衝突していました。

根本的にはなぜauthdigestファイルが消えないのか?という話になるのでしょうが、今回はそこには触れないでおこうと思います。
仮想基盤なのでシャットダウンが早い、systemdで停止時処理が並列で走る(んですかね?)、httpdの停止オプションがgracefulなので停止に時間がかかる、と言ったところの複合的なものかと思っているのですが。

長文お付き合いありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる