ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

ApacheをWindowsのサービスとして登録するには

WindowsApacheは、通常のインストーラの設定に従うと、デフォルトでサービスとして起動されるよう登録される。
今回は、異なる設定ファイルを読み込むApacheを別々にWindowsのサービスとして起動するよう登録することに挑戦し、目的を達した。

当初の目的はPHP4をLoadするApacheとPHP5をLoadするApacheを別々に立ち上げることであった。
今回は以下のように、"httpd4"と"httpd5"というサービス名でそれぞれ登録してみる。後述のように、最終的には両方とも80番ポートとし、排他的に動作するよう設定した。

サービス名 設定ファイル
httpd4 conf/httpd_php4.conf
httpd5 conf/httpd_php5.conf

なお、当初目的がPHP4とPHP5の共存である為、上掲のconfはPHP4/5の差分、LoadModule周辺部分のみが含まれている。大半の共通部分は conf/httpd_common.conf として以下のように両confよりとりこませている。

Include conf/httpd_common.conf


まず、インストール時に入ったデフォルトのApacheサービスをWindowsのサービスより削除する。

> cd "C:\Program Files\Apache Group\Apache2\bin"
> apache -k uninstall
Removing the Apache service
The Apache service has been removed successfully.

次に、各設定ファイルが問題ないかチェックする。

> apache -f conf/httpd_php4.conf -t
Syntax OK
> apache -f conf/httpd_php5.conf -t
Syntax OK

サービスとして登録する。"-k install" と "-n サービス名" と "-f サーバー設定ファイル" を指定する。

> apache -k install -n "httpd4" -f conf/httpd_php4.conf

> apache -k install -n "httpd5" -f conf/httpd_php5.conf

ちなみに、サービスを削除するには以下のようになる。

> apache -k uninstall -n "httpd4"
> apache -k uninstall -n "httpd5"

サービスの起動・停止は、"-n"オプションと共に実行する。

> apache -k {start|stop|restart} -n "httpd{4|5}"

Apache Service Monitor を立ち上げると、二つのサービスが表示され、それぞれ起動・停止できるようになっている。

今回は最終的に両方とも80番で動かすようにしたため、排他的に起動・停止する。但し、デフォルトはhttpd4としたかったため、Windowsのサービス設定画面より、httpd4を「自動」とし、httpd5を「手動」とした。これによりマシン起動時はデフォルトでPHP4のApacheが起動し、PHP5で動かしたければ手動でhttpd5へ切り替えるようにした。

追記
上記手法でサービスを登録後は、サービスのコンソールからhttpd4/5のスタートアップの種類を調整しておくことをお奨めする。
サービスのコンソールは「ファイル名を指定して実行」で "services.msc" を実行すれば立ち上がる。

スタートアップの種類を「自動」にしたものが、Windows起動後に自動的に立ち上がる。「手動」に設定すると、Windows起動後に自動的に立ち上がることはなく、サービスのコンソールまたは下記NETコマンドより手動で立ち上げる必要がある。
httpd4とhttpd5はどちらかしか動かせないので、好きな方を「自動」に設定し、もう片方は「手動」に設定する必要がある。

サービスの起動・停止は、Windows標準のNETコマンドを使っても制御出来る。

> NET {START|STOP} "httpd{4|5}"