Windows で Java のデーモンをサービスとして起動させときたかったんですが、なんか良いものないかなと思ったら winsw というのを見つけました。
作者は Jenkins の川口耕介さんであり、もともと winsw も Jenkins を念頭に作成されたらしいです。 実際に GitBucket を動かしてみたところ、問題なくサービス化できています。
手順
Github 上にインストールガイドがあるので、それに従えば良いと思います。 というのも乱暴かもしれませんので、以下に概要を記載しておきます。ここでは、prg というプログラムをサービス化するという前提で記載します。
winsw.exe
をダウンロードして、prg.exe
にリネームする- 設定ファイルとして、
prg.xml
を作成する (後述) prg.exe
とprg.xml
を同じフォルダに配置する- コマンドラインで、
prg.exe install
を実行する。これで Windows に prg がサービス登録される。
あとは、Windows Service Manager を使って、Windows の起動に合わせて起動をかける等、通常のサービスと同様に設定が可能になります。
設定ファイル
以下が Jenkins 用のサンプル設定。
<service> <id>jenkins</id> <name>Jenkins</name> <description>This service runs Jenkins continuous integration system.</description> <env name="JENKINS_HOME" value="%BASE%"/> <executable>java</executable> <arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments> <logmode>rotate</logmode> </service>
書いてあることはだいたい読めば分かりますが、上で記述されている中で分かりづらいものがあるとすると、BASE
くらいかと思います。
BASE
:winsw.exe
(をリネームしたもの) が配置されているディレクトリ。環境変数として扱われるので、%BASE%
で値が参照できる。
結構細かな設定が可能でして、
- 作業ディレクトリ
- サービスから出力されるログの扱い (ローテーション等)
- サービス起動時のタイムアウト
- 起動時に設定ファイル等をダウンロードできる (auto update)
とかが可能です。
Windows で何かデーモン的なものを立ち上げるときには、採用を検討しても良いのではないでしょうか。