質問: お世話になっております。 標記の件でお知恵を貸してください。 Miracle Linuxサーバがあるのですが、systemdで自動起動設定がなされているhttpdが起動しない状況です。 起動エラーを確認すると以下のメッセージが出力されます。 ``` [root@ ~]# 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=/usr/sbin/httpd-scl-wrapper $OPTIONS -k graceful-stop (code=exited, status=226/NAMESPACE) Process: 11041 ExecStart=/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 systemd[1]: Starting The Apache HTTP Server... 9月 12 15:33:46 systemd[11041]: Failed at step NAMESPACE spawning /usr/sbin/httpd-scl-wrapper: Bad address 9月 12 15:33:46 systemd[1]: httpd24-httpd.service: main process exited, code=exited, status=226/NAMESPACE 9月 12 15:33:46 systemd[1]: httpd24-httpd.service: control process exited, code=exited status=226 9月 12 15:33:46 systemd[1]: Failed to start The Apache HTTP Server. 9月 12 15:33:46 systemd[1]: Unit httpd24-httpd.service entered failed state. 9月 12 15:33:46 systemd[1]: httpd24-httpd.service failed ``` ただ、このサーバで"/usr/lib/systemd/system"配下の"httpd24-httpd.service"ファイルを PrivateTmp=false とすると起動します。(というか起動してしまいます) unameコマンドの結果は以下の通りです。 ``` Linux 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 /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らしい、くらいしか情報がありません。 有識者のお知恵を拝借できればと思う次第です。
回答: 根本的ではないのですが、ワークアラウンドとして成立すると思うので下記内容で自己解決とさせてください。 【"/var/run/httpd/"配下の"authdigest_shm."を削除する】 順を追って記載します。 本件質問の一番最初の事象ですが、サーバを(再)起動した時に自動起動設定のはずのhttpdが起動しないので"systemctl star httpd24-httpd.service"をした時に発生したものです。 ですので本当はサーバ起動時にhttpdが起動しないことを疑問に思うべきでした。 遅まきながらその事に気付き調査した結果、(おそらくOS停止処理の問題で)"httpd.pid"や"authdigest_shm."が残ってしまうことが発覚しました。 先に書いた通り、ある日突然私の手元に来たサーバだったので経緯は不明瞭ですが、"authdigest_shm."が20個近くある状態でした。 それらのファイル名のPIDを見ると1300番台後半のものばかりでした。 9/15に補足記述したログにはPID=1398とありますが、このサーバの起動シーケンス的にhttpdには1300番台後半から1400番台前半のpidが割り当てられるようです。 9/15に追記したログの内容から、残存したauthdigestファイルのPIDとサーバ起動時にhttpdに付与されたpidが衝突し、"authdigest_shm."が既に存在するのでhttpd起動NGになったのであろうと考えました。 裏付けとして"authdigest_shm.1300~1399"を作成してサーバ再起動を繰り返したところ、httpdに割り当てられたpidが1300番台のときは起動に失敗し、1400番台のときは起動に成功することを複数回確認しました。 ※今回業務上の都合でサーバ自体の停止と起動を繰り返しています。 その後authdigestファイルを削除のうえサーバの再起動を繰り返したところ、OSの起動とともにhttpdも起動することを確認しました。 数回httpdが起動しないことがありましたが、そのケースにおいては100%の確率でauthdigestファイル名のPIDとhttpdに割り当てられたpidが衝突していました。 根本的にはなぜauthdigestファイルが消えないのか?という話になるのでしょうが、今回はそこには触れないでおこうと思います。 仮想基盤なのでシャットダウンが早い、systemdで停止時処理が並列で走る(んですかね?)、httpdの停止オプションがgracefulなので停止に時間がかかる、と言ったところの複合的なものかと思っているのですが。 長文お付き合いありがとうございました。