fedora16でhttpd.serviceがsystemctl startで立ち上がらなかったマヌケな話

 あまりにもマヌケなので技術的雑談にせずに駄文で…。

fedora16でサーバ構築をしていて、webサーバとして定番のapache httpdをチョイス。
yumで2.2.22だったかをinstallして、旧サーバのhttpd.confを移植してserver httpd startした。

ここで「systemctlにリダイレクトしたよー」と出たのでfedoraの新しいヤツはSysVinitじゃなくてsystemdに移行していたことを思い出す。
ただ、fedora自身の用意してくれているrpm使っている限りはsystemdに必要なscriptも含まれているようなので問題なさげ。

んが、systemctl start httpd.serviceしてもうごかねぇ。

メッセージは流してしまったので貼り付けられないけど、systemctl status httpd.serviceしても、リターンコードが「0」でfailedになっているというヘンテコリンな状態。
error_log上は特にエラーなし。ただ、正常起動した後でsinal来て殺されているっぽい。

んで、どーしたもんかとapachectl startしたら普通に動くんですよ・・・これが。

ってことは、systemd関係?少なくともhttpd自体はおかしくない事は確定。
でも他に何をほじくっていったら問題箇所が特定できる?systemdってどこにログ吐くの?

そんなこんなでサーバ内をウロウロしたら、結局はsystemdのログって普通に/var/log/messagesに出てたのね。

しかも、httpdの起動に失敗した件もちゃんとログ上がっていて、「pidファイルがreadableにならないからtimeoutする」ってゆーてる。
あー、だからerror_log上は普通にsignalで死んでいるのね。
(多分systemdが一定時間で成功条件満たしたと検知できないからとりあえず殺しておくかってな感じで。)

で、ここからしばらく悩むのだが、

systemctl start httpd.service叩いた後にバックグラウンドで/var/run/httpd/の中をwatchしていたが、httpd自体はpsで立ち上がっているのが確認できるのに、pidファイルが作成されていない!
なんでじゃ!!

httpd -Vでコンパイルデフォルトを確認すると、pidファイルの作成先は「run/httpd.pid」となっている。

ん?これってどこ?httpdのrootは/etc/httpdになっているので、/etc/httpd/run配下って事??
それはシンボリックリンクで/var/runに行ってるよ。

さらにさらにしばらく徘徊した後、ハタと気がつく。

「あ、/var/run/httpd.pidじゃなくて/var/run/httpd/httpd.pid」じゃねーかよ!!」

そう、messagesで「ねーよ」って言っているファイルと、httpdが作成しているファイルのパスがズレているんですね…。
で、何でそんなことになっていたかというと、httpd.conf内で「run/httpd.pid」を作るように指定しているから。

果たして、httpd.confの該当行を「run/httpd.pid」ではなくてsystemdが求めるフルパスにしてあげると、何の事無くhttpdはsystemctl start httpd.serviceで立ち上がるのでした・・・・・・。

新しいOSに設定移植する場合でも新しいOS側の設定ファイルはちゃんと見ておかないとダメという教訓ですね。
はい。