ActiveMQ Artemis を Windows サービスとしてインストールする方法は?

ActiveMQ Artemis を Windows サービスとしてインストールする方法は?

タイトルは少し誤解を招くかもしれません。私はartemisをWindowsサービスとしてインストールする方法を知っているので、ドキュメントによると、実行するだけです。

artemis-service.exe install

これは私にはうまくいきません。ActiveMQ Artemisバージョン2.31と2.29でサービスをインストールして実行してみました。どちらのバージョンでも、サービスを実行すると次のログが生成されます。artemis-service.wrapper.log

2023-10-23 10:19:50,116 DEBUG - Starting WinSW in the service mode
2023-10-23 10:19:50,147 INFO  - Starting %JAVA_HOME%\bin\java.exe  -XX:+UseParallelGC -Xms512M -Xmx1024M -classpath "C:\Program Files (x86)\apache-artemis-2.31.0\lib\artemis-boot.jar" "-Dartemis.home=C:\Program Files (x86)\apache-artemis-2.31.0" -Dartemis.instance=C:\ArtemisBroker -Ddata.dir=C:\ArtemisBroker\data -Dartemis.instance.etc=C:\ArtemisBroker\etc -Djava.security.auth.login.config=C:\ArtemisBroker\etc\login.config -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=file:/C:/ArtemisBroker/etc/jolokia-access.xml org.apache.activemq.artemis.boot.Artemis run 
2023-10-23 10:19:50,178 DEBUG - Completed. Exit code is 0

次の警告が表示されます。

ここに画像の説明を入力してください

何らかのヒントを与える唯一の情報源は、次のエントリを含む Windows イベント ログです。

ここに画像の説明を入力してください

Service cannot be started. System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at winsw.Util.ProcessHelper.StartProcessAndCallbackForExit(Process processToStart, String executable, String arguments, Dictionary`2 envVars, String workingDirectory, Nullable`1 priority, ProcessCompletionCallback callback, Boolean redirectStdin, LogHandler logHandler, Boolean hideWindow)
   at winsw.WrapperService.StartProcess(Process processToStart, String arguments, String executable, LogHandler logHandler, Boolean redirectStdin)
   at winsw.WrapperService.OnStart(String[] args)
   at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

実行されたコマンドのすべてのパスを確認しましたが、すべて正常のようです。

私が気づいたのはエントリーだけです

<startargument>-Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%/jolokia-access.xml</startargument>

そして

<env name="ARTEMIS_INSTANCE_ETC_URI" value="file:/C:/ArtemisBroker/etc/"/>

artemis-service.xml、これは次のように解決されます。

-Djolokia.policyLocation=file:/C:/ArtemisBroker/etc//jolokia-access.xml org.apache.activemq.artemis.boot.Artemis

これは少し間違っているように思えますが、これを変更しても(1つ削除しても/)何も変わりません。

これを解決するにはどうすればよいですか?

答え1

Greg のコメントのおかげで、問題を理解することができました。Sysinternals プロセス モニターを使用して、いくつかのフィルタリングを行った後、次のエントリを見つけました。

ここに画像の説明を入力してください

これは、サービスの起動時に起動用の Java 実行ファイルさえ見つけられなかったことを意味します。パスは、環境変数が%JAVA_HOME%実際には見つからないことを示しています (プログラムはサブパス文字列を挿入して PATH をスキャンします)。

変数を設定したことはほぼ確実だったので、これには驚きました。私の間違いは、それをシステム変数ではなくユーザー変数として設定したことでした。どうやら、Windows は、私がログインしているユーザーとは別のユーザーとしてサービスを開始するため、変数が見つからないようです。

%JAVA_HOME%システム環境変数として設定することで、この問題は解決しました。

関連情報