質問

実行可能なJARファイルがあります。そのJARのWindowsサービスを作成することはできますか?実際には、起動時に実行したいだけなのですが、そのJARファイルをスタートアップフォルダーに入れず、レジストリにも入れたくありません。

役に立ちましたか?

解決

この記事では、知っておく必要があることをすべて説明しています。 " JavaアプリケーションをWindowsサービスとして実行する" ; " Java Service Wrapper "の使用に言及しています。 ( YAJSW というコミュニティエディションがあります)

他のヒント

私がこれまでに見つけた最も簡単な解決策は、 Non-Sucking Service Manager

です。

使用法は

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"

nssm.exeを使用しますが、AppDirectoryを設定することを忘れないでください。必要なライブラリまたはリソースにアクセスできなくなります。デフォルトでは、nssmは現在の作業ディレクトリを、jarではなくjava.exeアプリケーションの作業ディレクトリに設定します。 バッチスクリプトを作成するには、次のようにします。

    pushd <path-to-jar>
    nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
    nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"

これにより、サービスの一時停止の問題が修正されます。

Apache Commons Daemon を試しています。 Windows( Procrun )およびUNIX( Jsvc )。 Advanced Installerには、サンプルプロジェクトを含む Java Serviceチュートリアルがあります。ダウンロードする。 javaservice.jarをWindowsサービスとして実行している場合は、「telnet 4444」を使用してテストできます。私が焦点を当てたのは、Javaを作成するのではなく、Java Windowsサービスを実行することに焦点を当てていたためです。

Tanukiは少し前にjswのライセンスを変更しました。プロジェクトを開始する場合、Yet Another Java Service Wrapper http://yajsw.sourceforge.net/ これは、JWSを模倣したオープンソース実装であり、JWSに基づいて構築され、さらに改善されます。

編集:私は数年にわたりYAJSWを複数のプラッター(Windows、複数のLinux ...)で使用してきましたが、素晴らしいことであり、開発が進行中です。

procrunでは、prunsrvをアプリケーションディレクトリにコピーする必要があります(ダウンロード)、次のようなinstall.batを作成します。

set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%

と推測します

  • jarおよびprunsrv.exeと同じディレクトリからこれを実行します
  • jarには有効なMANIFEST.MFがあります
  • JVMにシャットダウンフックが登録されている(たとえば、Springのcontext.registerShutdownHook()で)...
  • jarの外部のファイルに相対パスを使用しない(たとえば、log4jは log4j.appender.X.File = $ {app.home} /logs/my.log などで使用する必要があります) )

procrun マニュアルおよびこのチュートリアルを参照してください。

そのために Tanuki Service Wrapper を使用します。それは非常に設定可能です。

もう1つのオプションはwinswです。 https://github.com/kohsuke/winsw/

xmlファイルを設定して、サービス名、実行するもの、引数などを指定します。そして、exeを使用してインストールします。 xmlの例: https://github.com/kohsuke/winsw/tree/master/examples

nssmよりも軽量なexeであるため、これを好みます。 config xmlはソースコードへの共有/コミットが簡単です。

PS your-service.exe install

を実行してサービスをインストールします
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top