XP および Vista でサービスとしてインストールする必要がある Java アプリケーションを継承しました。Windows を何らかの形で使用してから約 8 年になりますが、サービスを作成する必要はありませんでした。Java アプリのようなものは言うまでもありません (アプリ用の jar と単一の依存関係の jar - log4j があります)。 )。これをサービスとして実行するために必要な魔法は何ですか? ソースを入手したので、コードの変更は可能ですが、回避することが望ましいです。
19 に答える
Apache Commons Daemonは良い代替手段です。Windowsサービス用のProcrunと UNIX デーモン用のJsvcがあります。より制限の少ない Apache ライセンスを使用し、Apache Tomcat はそれを Windows および Linux で実行するための一部として使用します! それを機能させるには少し注意が必要ですが、機能する例を網羅した記事があります。
それに加えて、 Apache Tomcatの bin\service.bat を見て、サービスのセットアップ方法を理解することができます。Tomcat では、Procrun バイナリの名前を変更します (prunsrv.exe -> tomcat6.exe、prunmgr.exe -> tomcat6w.exe)。
Procrun の使用に苦労しましたが、start メソッドと stop メソッドはパラメーター (String[] argv) を受け入れる必要があります。たとえば、「start(String[] argv)」と「stop(String[] argv)」は機能しますが、「start()」と「stop()」ではエラーが発生します。これらの呼び出しを変更できない場合は、必要に応じてこれらの呼び出しをマッサージできるブートストラップ クラスを作成することを検討してください。
Java Service Wrapperで運が良かった
Apache Commons Daemonを使用すると、カスタムの実行可能ファイル名とアイコンを使用できるようになりました! また、独自の名前とアイコンを持つカスタム Windows トレイ モニターを入手することもできます。
これで、独自の名前とアイコン (prunsrv.exe) でサービスを実行できるようになりました。また、システム トレイ モニター (prunmgr.exe) にも独自のカスタム名とアイコンがあります。
Apache Commons Daemon バイナリをダウンロードします (prunsrv.exe と prunmgr.exe が必要です)。
それらの名前をそれぞれ
MyServiceName.exe
および に変更しMyServiceNamew.exe
ます。WinRun4Jをダウンロードし、付属のプログラムを使用し
RCEDIT.exe
て Apache 実行可能ファイルを変更し、次のように独自のカスタム アイコンを埋め込みます。> RCEDIT.exe /I MyServiceName.exe customIcon.ico > RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
次のように Windows サービスをインストールします (詳細とオプションについては、ドキュメントを参照してください)。
> MyServiceName.exe //IS//MyServiceName \ --Install="C:\path-to\MyServiceName.exe" \ --Jvm=auto --Startup=auto --StartMode=jvm \ --Classpath="C:\path-to\MyJarWithClassWithMainMethod.jar" \ --StartClass=com.mydomain.MyClassWithMainMethod
これで、独自のアイコンと名前で実行される Jar の Windows サービスができました。また、モニター ファイルを起動することもできます。このファイルは、独自のアイコンと名前でシステム トレイで実行されます。
> MyServiceNamew.exe //MS//MyServiceName
簡単な方法はNSSM Wrapper Wrapper です (私のブログエントリを参照してください)。
もう 1 つのオプションはWinRun4Jです。これは、Windows サービス ホスト (32 ビット バージョンと 64 ビット バージョンの両方) としても機能する構成可能な Java ランチャーです。これはオープンソースであり、使用に制限はありません。
(完全な開示:私はこのプロジェクトに取り組んでいます)。
さらに別の答えはYet Another Java Service Wrapperです。ライセンスが優れているため、これは Java Service Wrapper の優れた代替手段のようです。また、JSW から YAJSW への移行を容易にすることも目的としています。確かに、Windows サーバーを初めて使用し、Java アプリをサービスとして実行しようとしている私にとっては、非常に使いやすかったです。
私が見つけた他のいくつかのものを使用しましたが、最終的には使用しませんでした:
- Java Service Launcher YAJSW よりも動作が複雑に見えたため、使用しませんでした。これはラッパーではないと思います。
- JSmooth Window のサービスを作成することは、その主な目標ではありませんが、実行できます。2007年以降活動がないので利用しませんでした。
JavaServiceWrapperはうまく機能すると思います。アプリケーションを統合する方法は3つあることに注意してください。コードを変更したくない場合は、オプション1が最適に機能するようです。構成ファイルは少しおかしくなる可能性がありますが、(オプション1の場合)開始し、引数を指定するプログラムは、プログラムを開始するヘルパープログラムであることを覚えておいてください。このための設定ファイルの例があります。
Glassfish v3 用に作成された「winsw」を使用しますが、Java プログラム全般でうまく機能します。
.NET ランタイムがインストールされている必要があります。
JavaServiceは LGPL です。とても簡単で安定しています。強くお勧めします。
さまざまなソリューションの優れた比較は、http: //yajsw.sourceforge.net/#mozTocId284533で入手できます。
個人的にはlaunch4jが好き
私はいつもsc.exeを使用しています(http://support.microsoft.com/kb/251192を参照)。SP1からXPにインストールする必要があります。Vistaのフレーバーにない場合は、Vistaリソースキットを使用してダウンロードしてロードできます。
Javaであまり複雑なことはしていませんが、完全修飾コマンドライン引数(x:\ java.exe ....)を使用するか、Antを使用してスクリプトを作成し、依存関係を含めてパラメーターを設定すると、問題なく機能します。
以前にJavaServiceを使用して成功しました。数年間更新されていませんが、私が使用したときはかなり堅実でした。
Java Service Wrapper のライセンスが気に入りませんでした。私は ActiveState Perl を使用して、その作業を行うサービスを作成しました。
C# でサービスを作成することも考えましたが、時間の制約が厳しすぎました。
別の良いオプションはFireDaemonです。NASA、IBM などの大手ショップで使用されています。完全なリストについては、彼らの Web サイトを参照してください。
私は現在、Eclipse ベースのアプリケーションを実行するためにこれを必要としていますが、最初にそのアプリケーションにローカルないくつかの変数を設定する必要があります。sc.exe は実行可能ファイルのみを許可し、スクリプトは許可しないため、 Windows 2003 リソース キットの一部である autoexnt.exe を使用しました。サービスを単一のバッチ ファイルに制限しますが、サービスに変換するバッチ スクリプトは 1 つだけ必要です。
チャオ!