ApacheをWindowsのサービスとして登録するには
Windows版Apacheは、通常のインストーラの設定に従うと、デフォルトでサービスとして起動されるよう登録される。
今回は、異なる設定ファイルを読み込む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}"