プロジェクト

全般

プロフィール

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プログラムをサービス化するラッパー

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をファイル選択ダイアログで指定

nssm-1.png

  • [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インストーラでインストールするとサービスとして登録・起動されます。