LoginSignup
55
45

More than 5 years have passed since last update.

Apache2.4 on CentOS7 でsystemctl start httpdで起動しない問題の対処法

Last updated at Posted at 2015-05-21

Apache2.2/CentOS6で動いていたサービスをApache2.4/CentOS7に移植しようとしたらハマったのでメモ。

症状

systemctl start したら延々待たされたあげくApacheが起動しない

[vagrant@localhost ~]$ sudo systemctl start httpd.service
# ここでシェルが固まったまま制御が返ってこない!

1-2分待つと制御が戻るのですが、どうも起動に失敗しているようです。

systemctl statusを見ると下記のような情報が。

[vagrant@localhost ~]$ sudo systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: failed (Result: timeout) since 木 2015-05-21 17:59:15 JST; 8s ago
  Process: 1154 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
 Main PID: 6061

 5月 21 17:56:15 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
 5月 21 17:57:45 localhost.localdomain systemd[1]: httpd.service operation timed out. Terminating.
 5月 21 17:59:15 localhost.localdomain systemd[1]: httpd.service stopping timed out (2). Killing.
 5月 21 17:59:15 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.
 5月 21 17:59:15 localhost.localdomain systemd[1]: Unit httpd.service entered failed state.

journalctlしても同じような情報でした。

[vagrant@localhost ~]$ sudo journalctl -xn
-- Logs begin at 木 2015-05-21 17:55:26 JST, end at 木 2015-05-21 18:03:41 JST. --
 5月 21 18:01:01 localhost.localdomain run-parts(/etc/cron.hourly)[6116]: starting 0anacron
 5月 21 18:01:01 localhost.localdomain run-parts(/etc/cron.hourly)[6122]: finished 0anacron
 5月 21 18:01:01 localhost.localdomain run-parts(/etc/cron.hourly)[6124]: starting 0yum-hourly.cron
 5月 21 18:01:01 localhost.localdomain run-parts(/etc/cron.hourly)[6128]: finished 0yum-hourly.cron
 5月 21 18:02:29 localhost.localdomain systemd[1]: httpd.service stopping timed out (2). Killing.
 5月 21 18:02:29 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit httpd.service has failed.
--
-- The result is failed.
 5月 21 18:02:29 localhost.localdomain systemd[1]: Unit httpd.service entered failed state.

Apacheのエラーログ(/var/log/httpd/) には何もエラーが出力されていませんでした。

原因はsystemd_moduleの読み込み忘れ

systemd_moduleは取説が見当たらないが、ないとFedora 19ではapacheは起動しない。 ソースらしきものを見ると、systemdに起動したことの表示と処理件数の報告など、2種類の通知が行われているもよう。systemd_moduleがないと apache httpdを起動できない。正確には、httpdは起動しても、systemdが起動したことが わからないため、systemdからhttpdを起動できない。sysstemdはhttpdを起動するときに systemd moduleがないと、httpdは起動しても1-2分後にhttpdを殺して、「失敗した」と表示する。

だそうです。
たしかにそんな感じの挙動でした。

systemd_moduleを読むこむようにして、マシンを再起動したら見事に解決しました。

LoadModule systemd_module modules/mod_systemd.so

どうやって原因を突き止めたのか

当初はまったく見当がつかず途方に暮れていたのですが、

まっさらのCentOS7にApache2.4をyum installした場合はどうなるのだろう?

ちゃんと起動した

Apache2.2のサーバから持ってきた自前設定ファイルに原因があるはず

Apache2.2用設定ファイルと、Apache2.4をyum installした直後の設定ファイルを比較してみた

Apache2.4には"systemd_module"という見知らぬモジュールがある。これは何だろう?

と考えて"systemd_module"でぐぐってみたら上記の答えにたどりつきました。

55
45
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
55
45