Java のアプリを、Windowsでサービス化する
どうも!最近プロジェクトが始まって忙しく過ごしています。そのプロジェクトで使用する予定の OS が Windows なのですが、その関連で Solr と Zookeeper をサービス化する方法を調べました。*1 結論としては、nssm というツールで、かなり簡単に実現することができました。以下では、Zookeeper のサービス化をサンプルに記載していますが、Solr や jetty などでも問題なく可能だと思います。
なお、補足ですが、Zookeeper はプロダクション用途では Windows 上での稼働を推奨しておりません!ご注意ください。
NSSM について
- sc.exe は、そのままではサービス化できない。登録はできるが、起動しない。
- tanuki wrapper はコミュニティー版は、64bit 対応していない。。
- nssm は、64bit対応、UIもついており簡単そう!
NSSM - the Non-Sucking Service Manager
nssm で、Zookeeper をサービス化する手順
インストールディレクトリの作成し、ダウンロードしたバイナリを展開。 c:\zoookeeper とします。
フォルダの作成 dataフォルダを作成
設定ファイルの作成 設定ファイルのパスは以下。内容は適当に。
c:\/zookeeper/conf/zoo.cfg
tickTime=2000 initLimit=10 syncLimit=5 dataDir=c:/zookeeper/data clientPort=2181
- サービス化 ここで、nssm を使用する。コマンドプロンプトで以下を実行。
nssm.exe install zookeeper
ウインドウがダイアログで立ち上がります。ウインドウに表示されるフォームに項目を入力しインストールボタンを押下。サービス名や Zookeeper の起動スクリプト zkServer.cmd のパス、ログの出力先を設定します。
- 動作確認 サービスを起動し、zookeeper のクライアントで接続ができるかを確認。まず、以下を実行。
c:\/zookeeper/bin/zkCli.cmd
次に、対話型のプロンプトが上がるので、以下を実行。
[zk: localhost:2181(CONNECTED) 14] ls / [zookeeper] → これが表示されればOK [zk: localhost:2181(CONNECTED) 15] quit Quitting...
注意点!
- nssm でサービス化すると、windows -> neem.exe ->zkServer.cmd となるので、インストール後に nssm.exe を削除することは出来ない。nssm.exe の配置場所に注意。
メモ
- ライセンスは、public domain 。ありがたいです。。*2
- 標準出力、標準エラーをログファイルとして出力が可能。また、ローテーションの設定も可能。