Windowsプログラムのサービス化¶
書きかけ |
Windowsのサービスプログラムとは¶
ユーザーのセッション(ログオン・ログオフ)とは切り離して長期間実行するプログラムで、OSの起動時に自動起動させることが可能、また、サービスの管理から停止・再起動・自動起動設定をすることが可能です。基本的にはユーザーインタフェースを持ちません。
サービスプログラムを作るには、サービス用にプログラムを作る他に、既存のプログラムをサービスとしてラップするラッパーを適用する方法があります。このページでは、既存プログラムをサービスとするラッパーを紹介します。
既存プログラムをサービス化する¶
サービス化のツール¶
既存プログラムをサービス化するラッパー¶
- sc
Windows OS標準搭載ツール。Windowsサービスとして作られたexe(サービス制御通知に応答する)でないとサービス化できない模様(というかサービス管理のコマンドラインツール) - sexe
http://www.nanshiki.co.jp/software/index.html?sexe - NSSM(the Non-Sucking Service Manager)、パブリックドメイン
http://nssm.cc/
Javaプログラムをサービス化するラッパー¶
- jsw(Java Service Wrapper)
http://wrapper.tanukisoftware.com - Apache Commons Daemon
https://commons.apache.org/proper/commons-daemon/ - YAJSW、APL/LGPL
http://yajsw.sourceforge.net/ - exewrap、BSD風ライセンス
http://exewrap.osdn.jp/
exewrap¶
JARマニフェストのMain-Class属性で指定したクラスに、startおよびstopメソッドの実装が必要です。
NSSM¶
JavaアプリケーションをWindowsサービス化する解説記事
http://giordanomaestro.blogspot.jp/2013/01/running-java-applications-as-windows.html
- NSSMのダウンロードページ からnssm-2.24.zip をダウンロードし、適当なディレクトリ(C:\tool)の下に展開
- Javaの起動バッチファイルを作成(C:\Users\torutk\netbeans\SampleHttpServer\start.bat)
@ECHO OFF REM start sample http server java -jar dist\SampleHttpServer.jar %1
- NSSMを実行(installおよびサービス識別子SampleHttpServerを指定して)
C:\tool\nssm2.24\win64\nssm.exe install SampleHttpServer
- GUIが立ち上がるので、上述のstart.batをファイル選択ダイアログで指定
- [Details]タブにDisplay nameと説明を適当に記述
- [Install service]ボタンを押すとサービスとして登録
サービスをアンインストールするときは、サービスを停止してから
C:\tool\nssm2.24\win64\nssm.exe remove SampleHttpServer
YaJSW¶
- yajswをダウンロードして適切な場所に展開します(例、C:\tools\yajsw)
- サービス化対象プログラムを実行し、そのプロセスIDを取得します(起動バッチ/スクリプトのPIDではない点に注意)
- プロセスIDを指定してyajswのgenconfigコマンドを実行します(例、C:\tools\yajsw\bat\genconfig <PID>)
→ C:\tools\yajsw\conf\wrapper.conf が生成されます - サービス化対象プログラムを停止します
- wrapper.confファイルを編集します
wrapper.app.account 行をコメントアウト
wrapper.ntservice.name を指定 - runConsole.batで対象プログラムが動作することを確認
- サービスをインストールするには、installService.bat を実行、サービスをアンインストールするには、uninstallService.bat を実行
サービス化の事例¶
Javaプログラム¶
H2database¶
Windowsサービスとして動かす設定バッチファイルが提供され、それを実行するとサービスとして登録されます。サービスの実現にはJSWを使用しています。
Jenkins¶
Windowsインストーラでインストールするとサービスとして登録・起動されます。