Pregunta

Tengo un archivo JAR ejecutable. ¿Es posible crear un servicio de Windows de ese JAR? En realidad, solo quiero ejecutar eso en el inicio, pero no quiero colocar ese archivo JAR en mi carpeta de inicio, ni en el registro.

¿Fue útil?

Solución

Este artículo debe informarle todo lo que necesita saber: " Ejecución de aplicaciones Java como un servicio de Windows " ; menciona el uso de " Java Service Wrapper " (hay una edición comunitaria llamada YAJSW )

Otros consejos

La solución más fácil que encontré para esto hasta ahora es el Gerente de Servicios para No Chupar

El uso sería

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

Use nssm.exe, pero recuerde que debe configurar el Directorio de Aplicaciones o no se podrá acceder a las bibliotecas o recursos necesarios. Por defecto, nssm establece el directorio de trabajo actual al de la aplicación, java.exe, no al jar. Haz esto para crear un script por lotes:

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

Esto debería solucionar el problema del servicio en pausa.

He estado experimentando con el Apache Commons Daemon . Es compatible con Windows ( Procrun ) y unix ( Jsvc ). Advanced Installer tiene un Tutorial de servicio Java con un proyecto de ejemplo descargar. Si ejecuta javaservice.jar como un servicio de Windows, puede probarlo utilizando " telnet 4444 " Utilicé su ejemplo porque mi objetivo era poner en funcionamiento un servicio de Windows Java, no escribir Java.

Tanuki cambió la licencia de jsw hace algún tiempo, si tuviera que comenzar un proyecto, usaría Yet Another Java Service Wrapper, http://yajsw.sourceforge.net/ es más o menos una implementación de código abierto que imita a JWS, se basa en ella y la mejora aún más.

EDITAR: He estado usando YAJSW durante varios años en varias plataformas (Windows, varios linuxes ...) y es genial, el desarrollo está en curso.

Con procrun necesita copiar prunsrv al directorio de la aplicación ( descargar ), y crea un install.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%

Supongo que

  • ejecute esto desde el mismo directorio donde se encuentra el archivo jar y prunsrv.exe
  • el frasco tiene su MANIFEST.MF de trabajo
  • y tiene ganchos de apagado registrados en JVM (por ejemplo con context.registerShutdownHook () en Spring) ...
  • no usar rutas relativas para archivos fuera del jar (por ejemplo, log4j debe usarse con log4j.appender.X.File = $ {app.home} /logs/my.log o algo parecido )

Compruebe el procrun manual y este tutorial para obtener más información.

Usamos el Tanuki Service Wrapper para eso. Es muy configurable.

Otra opción es winsw: https://github.com/kohsuke/winsw/

Configure un archivo xml para especificar el nombre del servicio, qué ejecutar, cualquier argumento, etc. Y use el exe para instalar. Ejemplo xml: https://github.com/kohsuke/winsw/tree/master/examples

Prefiero esto a nssm, porque es un exe ligero; y el xml de configuración es fácil de compartir / comprometerse con el código fuente.

PS, el servicio se instala ejecutando your-service.exe install

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top