Pergunta

Eu tenho um arquivo JAR executável. É possível criar um serviço Windows desse frasco? Na verdade, eu só quero executar isso na startup, mas não quero colocar esse arquivo JAR na minha pasta de inicialização, nem no registro.

Foi útil?

Solução

Este artigo deve dizer tudo o que você precisa saber:"Executando aplicativos Java como um serviço do Windows"; menciona usar "Invólucro de serviço java"(Existe uma edição comunitária chamada Yajsw)

Outras dicas

A solução mais fácil que encontrei para isso até agora é o Gerente de serviço que não suva

Uso seria

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

Use o NSSM.EXE, mas lembre -se de definir o AppDirectory ou quaisquer bibliotecas ou recursos necessários não estarão acessíveis. Por padrão, o NSSM define o diretório de trabalho atual para o do aplicativo, java.exe, não o jar. Então faça isso para criar um script em lote:

    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>"

Isso deve corrigir a questão interrompida do serviço.

Eu tenho experimentado Daemon Apache Commons. É suporta o Windows (Procrun) e Unix (JSVC). Instalador Avançado tem um Tutorial de serviço Java com um exemplo de projeto para baixar. Se você conseguir o javaservice.jar em execução como um serviço do Windows, poderá testá -lo usando "Telnet 4444". Eu usei o exemplo deles porque meu foco era colocar um serviço Java Windows em execução, não escrevendo Java.

Tanuki mudou a licença da JSW há algum tempo, se eu fosse iniciar um projeto, eu usaria mais um invólucro de serviço Java, http://yajsw.sourceforge.net/ Essa é mais ou menos uma implementação de código aberto que imita os JWs e depois se baseia nele e melhora ainda mais.

EDIT: Eu uso o Yajsw há vários anos em várias platormes (Windows, vários Linuxes ...) e é ótimo, o desenvolvimento está em andamento.

Com o procrun, você precisa copiar o prunsrv para o diretório de aplicativos (download) e crie uma instalação.bat como este:

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%

Eu presumo

  • execute isso do mesmo diretório em que o frasco e prunsrv.exe são
  • o frasco tem seu manifesto de trabalho.mf
  • E você tem ganchos de desligamento registrados na JVM (por exemplo, com context.registershutdownook () na primavera) ...
  • não usar caminhos relativos para arquivos fora do frasco (por exemplo, log4j deve ser usado com log4j.appender.x.file = $ {App.home} /logs/my.log ou algo parecido)

Verifique o procrun manual e este tutorial Para maiores informações.

Nós usamos o Wrapper de serviço Tanuki por isso. É muito configurável.

Outra opção é o Winsws: https://github.com/kohsuke/winsw/

Configure um arquivo XML para especificar o nome do serviço, o que executar, quaisquer argumentos etc. e use o exe para instalar. Exemplo XML: https://github.com/kohsuke/winsws/tree/master/examples

Eu prefiro isso ao NSSM, porque é um exe leve; e o Config XML é fácil de compartilhar/se comprometer com o código -fonte.

Ps o serviço está instalado executando your-service.exe install

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top