Acabei de herdar um aplicativo java que precisa ser instalado como um serviço no XP e no Vista. Faz cerca de 8 anos desde que usei o Windows de qualquer forma e nunca tive que criar um serviço, muito menos algo como um aplicativo java (eu tenho um jar para o aplicativo e um jar para uma única dependência - log4j ) Qual é a mágica necessária para fazer isso funcionar como um serviço? Eu tenho a fonte, portanto, modificações de código, embora preferencialmente evitadas, são possíveis.
java
windows-services
ideasculptor
fonte
fonte
Respostas:
Tive alguma sorte com o Java Service Wrapper
fonte
O Apache Commons Daemon é uma boa alternativa. Possui Procrun para serviços do Windows e Jsvc para daemons unix. Ele usa licença Apache menos restritiva, e o Apache Tomcat a usa como parte de si mesma para executar no Windows e Linux! Fazê-lo funcionar é um pouco complicado, mas há um artigo exaustivo com um exemplo prático.
Além disso, você pode consultar o bin \ service.bat no Apache Tomcat para ter uma idéia de como configurar o serviço. No Tomcat, eles renomeiam os binários Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).
Algo em que lutei com o Procrun, seus métodos de início e parada devem aceitar os parâmetros (String [] argv). Por exemplo, "start (String [] argv)" e "stop (String [] argv)" funcionariam, mas "start ()" e "stop ()" causariam erros. Se você não pode modificar essas chamadas, considere criar uma classe de bootstrapper que possa massagear essas chamadas para atender às suas necessidades.
fonte
--JvmOptions=-Dopt=a#-Dopt2=b
. Eu estava executando o comando a partir de um script de formiga e lutei por dias por causa disso. Espero que ajude.Com o Apache Commons Daemon, agora você pode ter um nome e ícone executável personalizado! Você também pode obter um monitor de bandeja personalizado do Windows com seu próprio nome e ícone!
Agora tenho meu serviço em execução com meu próprio nome e ícone (prunsrv.exe), e o monitor da bandeja do sistema (prunmgr.exe) também possui meu próprio nome e ícone personalizados!
MyServiceName.exe
eMyServiceNamew.exe
respectivamente.Baixe o WinRun4J e use o
RCEDIT.exe
programa que acompanha o produto para modificar o executável do Apache para incorporar seu próprio ícone personalizado como este:Agora instale o serviço do Windows como este (consulte a documentação para obter mais detalhes e opções):
Agora você tem um serviço Windows do seu Jar que será executado com seu próprio ícone e nome! Você também pode iniciar o arquivo do monitor e ele será executado na bandeja do sistema com seu próprio ícone e nome.
fonte
Uma maneira simples é o NSSM Wrapper Wrapper ( veja a entrada do meu blog ).
fonte
Mais uma opção é o WinRun4J . Este é um lançador java configurável que funciona como um host de serviço do Windows (versões de 32 e 64 bits). É de código aberto e não há restrições quanto ao seu uso.
(divulgação completa: trabalho neste projeto).
fonte
Ainda outra resposta é Ainda outro Java Service Wrapper , essa parece ser uma boa alternativa ao Java Service Wrapper, pois possui melhor licenciamento. Também se pretende que seja fácil passar de JSW para YAJSW. Certamente para mim, novo nos servidores Windows e tentando fazer com que um aplicativo Java funcionasse como um serviço, era muito fácil de usar.
Encontrei outros, mas não acabei usando:
fonte
Eu acho que o Java Service Wrapper funciona bem. Observe que existem três maneiras de integrar seu aplicativo. Parece que a opção 1 funcionará melhor para você, pois você não deseja alterar o código. O arquivo de configuração pode ficar um pouco louco, mas lembre-se de que (para a opção 1) o programa que você está iniciando e para o qual especificará argumentos, é o programa auxiliar deles, que iniciará o programa. Eles têm um exemplo de arquivo de configuração para isso.
fonte
Se você usa a Gradle Build Tool, pode experimentar o meu windows-service-plugin , que facilita o uso do Apache Commons Daemon Procrun .
Para criar um aplicativo de serviço java windows com o plug-in, é necessário seguir várias etapas simples.
Crie uma classe de serviço principal com o método apropriado.
Inclua o plug-in no seu
build.gradle
arquivo.O mesmo snippet de script para o novo mecanismo de plug-in incubado, introduzido no Gradle 2.1:
Configure o plugin.
Execute a tarefa de classificação createWindowsService para criar uma distribuição de serviço do Windows.
É tudo o que você precisa fazer para criar um serviço simples do Windows. O plug-in baixará automaticamente os binários do Apache Commons Daemon Procrun, extrairá esses binários para o diretório de distribuição de serviços e criará arquivos em lote para instalação / desinstalação do serviço.
No
${project.buildDir}/windows-service
diretório, você encontrará executáveis de serviço, scripts em lote para instalação / desinstalação do serviço e todas as bibliotecas de tempo de execução. Para instalar o serviço, execute<project-name>-install.bat
e se você deseja desinstalar o serviço<project-name>-uninstall.bat
. Para iniciar e parar o serviço, use<project-name>w.exe
executável.Observe que o início do serviço de manipulação de métodos deve criar e iniciar um encadeamento separado para executar o processamento e, em seguida, retornar. O método principal é chamado de diferentes segmentos quando você inicia e para o serviço.
Para obter mais informações, leia sobre o plugin e o Apache Commons Daemon Procrun.
fonte
JavaService é LGPL. É muito fácil e estável. Altamente recomendado.
fonte
Com o Java 8, podemos lidar com esse cenário sem nenhuma ferramenta externa. A ferramenta javapackager fornecida com o java 8 fornece uma opção para criar pacotes de aplicativos independentes:
-native type Gera pacotes configuráveis de aplicativos independentes (se possível). Use a opção -B para fornecer argumentos para os empacotadores que estão sendo usados. Se o tipo for especificado, apenas um pacote configurável desse tipo será criado. Se nenhum tipo for especificado, tudo será usado.
Os seguintes valores são válidos para o tipo:
No caso do windows, consulte o documento a seguir , podemos criar msi ou exe conforme necessário.
fonte
Uma boa comparação de diferentes soluções está disponível em: http://yajsw.sourceforge.net/#mozTocId284533
Pessoalmente, como launch4j
fonte
é simples como você tem que colocar um atalho
Windows 7
C:\users\All Users\Start Menu\Programs\Startup
(Admin) ouUser home directory(%userProfile%)
Windows 10: Em execução
shell:startup
em sua propriedade -> atalho -> destino ->
java.exe -jar D:\..\runJar.jar
NOTA: Isso será executado somente após o login
Com direito de administrador
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
Criará o serviço do Windowsse você usar o tempo limite,
cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
mas mesmo assim, o tempo limite será excedido, mas em segundo plano o java.exe será iniciado. Check-in gerenciador de tarefasNOTA: Isso será executado na inicialização do Windows (antes de entrar, com base no serviço '
Startup Type
')Explicação detalhada da criação de serviço do Windows
fonte
Use " winsw ", que foi escrito para o Glassfish v3, mas funciona bem com os programas Java em geral.
Exija o tempo de execução do .NET instalado.
fonte
Eu usei o JavaService antes com bom sucesso. Não foi atualizado em alguns anos, mas era bastante sólido quando eu o usei.
fonte
Não gostei do licenciamento do Java Service Wrapper. Fui com o ActiveState Perl para escrever um serviço que faz o trabalho.
Pensei em escrever um serviço em C #, mas minhas restrições de tempo eram muito limitadas.
fonte
Eu sempre uso o sc.exe (consulte http://support.microsoft.com/kb/251192 ). Ele deve ser instalado no XP a partir do SP1 e, se não for do seu agrado do Vista, você pode fazer o download e carregá-lo com o kit de recursos do Vista.
Eu não fiz nada muito complicado com Java, mas usar um argumento de linha de comando totalmente qualificado (x: \ java.exe ....) ou criar um script com Ant para incluir dependências e definir parâmetros funciona bem para mim.
fonte
Outra boa opção é o FireDaemon . É usado por algumas grandes lojas como NASA, IBM, etc; consulte o site para obter uma lista completa.
fonte
Atualmente, estou exigindo que isso execute um aplicativo baseado em Eclipse, mas preciso primeiro definir algumas variáveis locais para esse aplicativo. O sc.exe permitirá apenas executáveis, mas não scripts, então eu virei para o autoexnt.exe, que faz parte do kit de recursos do Windows 2003 . Ele restringe o serviço a um único arquivo em lote, mas eu só preciso que um script em lote seja convertido em um serviço.
tchau!
fonte
O Exe4j é uma opção muito boa, embora não seja gratuito. Confira em Exe4j No assistente para criar o arquivo .exe, você tem a opção de criar um serviço.
fonte