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

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

新規登録して質問してみよう
ただいま回答率
85.48%
systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

8946閲覧

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

ynakano

総合スコア1894

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2016/09/12 23:58

編集2016/09/15 12:28

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

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) 9月 12 15:33:46 <hostname> systemd[1]: Starting The Apache HTTP Server... 9月 12 15:33:46 <hostname> systemd[11041]: Failed at step NAMESPACE spawning <httpd_dir>/usr/sbin/httpd-scl-wrapper: Bad address 9月 12 15:33:46 <hostname> systemd[1]: httpd24-httpd.service: main process exited, code=exited, status=226/NAMESPACE 9月 12 15:33:46 <hostname> systemd[1]: httpd24-httpd.service: control process exited, code=exited status=226 9月 12 15:33:46 <hostname> systemd[1]: Failed to start The Apache HTTP Server. 9月 12 15:33:46 <hostname> systemd[1]: Unit httpd24-httpd.service entered failed state. 9月 12 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らしい、くらいしか情報がありません。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/09/13 01:33 編集

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

2016/09/13 07:52

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

回答2

0

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 02:58

編集2016/09/17 16:18
TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ynakano

2016/09/14 04:39

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

2016/09/14 12:56

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

2016/09/14 12:59

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

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なので停止に時間がかかる、と言ったところの複合的なものかと思っているのですが。

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

投稿2016/09/16 11:52

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問