JavaプログラムをWindowsサービスとして起動
commons-daemonを使うのがいいらしい。Tomcat5.0以降にも採用されている。
procrunというのが
Windows用のもので、prunsrv.exeというEXEで
サービスのインストールも実行もやる。
なお、Tomcatには「tomcat6.exe」と「tomcat6w.exe」なんかが入っているが、
あれもprunsrv.exeと同じ。
メインクラス
サービス開始時にprocrunから呼ばれるクラスにはmainメソッドを実装し、
起動引数の第一引数が「start」の場合は開始処理(startメソッド)、
「stop」の場合は終了処理(stopメソッド)を呼び出すようにしておく。
停止フラグとなるbooleanのフィールド(isStopped)を1つ持たせ、
startメソッドはこれがfalseである間無限ループする。
(もちろんループごとに休む処理─sleep も適宜入れる。)
※startメソッドは、stopメソッドが呼ばれる(サービスの停止操作がかかる)まで
無限ループし、終わらないようにしておく(終わるように作ってしまうと、サービス起動エラーになる)。
stopメソッドではisStoppedフィールドをtrueにする処理のみ行なう。
(あとは、せいぜいログ出力。)
サービスクラス
サービスとして具体的に実行する処理を記述しておく。
(以前ここに『Daemonクラスを実装し、云々』と書いていたが、実はそれをしなくても
できてしまう模様。)
サービスのインストール
バッチファイルにしておくと便利。
zzzservice.exe //IS//ZzzService ^
--DisplayName="Zzz Service" ^
--Description="The test of zzz service" ^
--Install="C:\Temp\ZZZ\zzzservice.exe" ^
--Classpath="C:\Temp\ZZZ\Zzz.jar" ^
--Jvm="C:\Program Files\Java\jdk1.6.0_31\jre\bin\server\jvm.dll" ^
--LogPath="C:\Temp\ZZZ\logs" ^
--StdOutput=auto ^
--StdError=auto ^
--StartClass="zzz.ZzzService" ^
--StartMode=jvm ^
--StartParams=start ^
--StartPath="C:\Temp\ZZZ" ^
--StopClass="zzz.ZzzService" ^
--StopMode=jvm ^
--StopParams=stop ^
--StopPath="C:\Temp\ZZZ"
pause
アンインストールはこちら。
zzzservice.exe //DS//ZzzService
pause
なお、zzzservice.exe はもちろん prunsrv.exe をリネームしたもの。
この例は、インストールフォルダを C:\Temp\ZZZ\ としている。
レジストリ
サービスのインストールを行なうと、レジストリに情報が書き込まれる。
場所は
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation
あたり。
Tomcatのインストール情報もその辺にあるので、比較すると面白い。
.
最終更新:2012年05月08日 13:54