よしだのブログ

サブタイトルはありません。

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 をサービス化する手順

  1. インストールディレクトリの作成し、ダウンロードしたバイナリを展開。 c:\zoookeeper とします。

  2. フォルダの作成 dataフォルダを作成

  3. 設定ファイルの作成 設定ファイルのパスは以下。内容は適当に。

c:\/zookeeper/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=c:/zookeeper/data
clientPort=2181
  1. サービス化 ここで、nssm を使用する。コマンドプロンプトで以下を実行。
nssm.exe install zookeeper

ウインドウがダイアログで立ち上がります。ウインドウに表示されるフォームに項目を入力しインストールボタンを押下。サービス名や Zookeeper の起動スクリプト zkServer.cmd のパス、ログの出力先を設定します。

  1. 動作確認 サービスを起動し、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
  • 標準出力、標準エラーをログファイルとして出力が可能。また、ローテーションの設定も可能。