Configurar aplicaciones Java como servicio en Windows con WinSW

Índice

  • Acerca de WinSW
  • Instalación
  • Configuración
  • Uso
  • Servicios comunes
  • Nginx

Acerca de WinSW

WinSW, conocido como Windows Service Wrapper, permite empaquetar aplicaciones para que se ejecuten como servicios en Windows. La versión 3 de WinSW requiere .NET Framework 4.6.1 o superior. Para sisteams sin .NET Framework, el proyecto ofrece binarios nativos de 64 bits y 32 bits basados en .NET 7.

  1. Repositorio oficial: https://github.com/winsw/winsw
  2. Descargas oficiales: https://github.com/winsw/winsw/releases
  3. Nota: descargue la versión más reciente (Latest)
  4. Archivos necesarios:
  • Archivo de configuración: elija uno de los siguientes
  • Configuración completa: sample-allOptions.xml
  • Configuración mínima: sample-minimal.xml
  • Archivo ejecutable: según la arquitectura del sistema (generalmente x64)
  • WinSW-x64.exe

Instalación

  1. Un conjunto de WinSW (archivo XML + ejecutable) solo puede gestionar un servicio.
  2. Coloque el archivo de configuración y el ejecutable en el mismo directorio que el archivo JAR de la aplicación.
  3. Renombre ambos archivos para que coincidan con el nombre del archivo JAR (recomendado aunque no obligatorio).
  4. Edite el archivo XML con un editor de texto. A continuación se detallan las configuraciones clave.

Configuración

Todas las opciones deben estar dentro de las etiquetas <service> y </service>. Los cambios surtirán efecto al reiniciar el servicio.

  1. Configuraciones principales:
  2. Identificador del servicio: <id>Debe ser único dentro del sistema operativo.
  3. Nombre visible del servicio: <name>Muestra el nombre en el Administrador de servicios.
  4. Descripción del servicio: <description>Información adicional mostrada en el panel de servicios.
  5. Aplicación ejecutable: <executable>Ruta al comando que inicia la aplicación. Para Java, puede usarse java si está en el PATH.
  6. Parámetros de inicio: <arguments>Argumentos pasados al proceso, por ejemplo: -jar D:\app.jar
  7. Modo de arranque: <startmode>Puede ser Automatic (arranque automático) o Manual. Use Automatic si depende de otros servicios como MySQL o Redis.
  8. Registro de logs de WinSW: <log mode="none"/>Evita que WinSW genere un archivo de log innecesario con salida de consola.
  9. Ruta de logs de WinSW: <logpath>Directorio donde se almacenarán los registros de WinSW. Si no se especifica, se guarda en el directorio actual.
  10. Variables de entorno temporales: <env name="var" value="valor"/>Permite definir variables locales durante la ejecución del servicio.
  11. Dependencias de servicios: <depend>Especifica otros servicios que deben estar activos antes de iniciar este.
  12. Otras opciones disponibles: Consulte: https://github.com/winsw/winsw/blob/v3/docs/xml-config-file.md
  13. Más opciones de registro: Consulte: https://github.com/winsw/winsw/blob/v3/docs/logging-and-error-reporting.md
  14. Ejemplo de configuración:
<service>
  <id>MyJavaApp</id>
  <name>Servicio Java de Prueba</name>
  <description>Aplicación Java desplegada como servicio</description>
  <depend>MySQL</depend>
  <env name="JAVA_HOME" value="D:\jdk-17"/>
  <executable>%JAVA_HOME%\bin\java</executable>
  <arguments>-XX:MetaspaceSize=1g -XX:MaxMetaspaceSize=2g -Xms2g -Xmx8g -Xmn1g -Xss1m -XX:SurvivorRatio=8 -Dfile.encoding=utf-8 -jar D:\app.jar</arguments>
  <startmode>Automatic</startmode>
  <log mode="none"/>
  <logpath>D:\logs\app</logpath>
</service>

Uso

  1. Gestionar el servicio mediante el ejecutable con comandos específicos.
  2. Sintaxis: nombre.exe <comando>
  3. Comandos disponibles:
  • install: instala el servicio
  • start: inicia el servicio
  • stop: detiene el servicio
  • restart: reinicia el servicio
  • status: muestra el estado actual
  • uninstall: elimina el servicio del sistema
  1. Para más detalles sobre comandos, consulte: https://github.com/winsw/winsw/blob/v3/docs/cli-commands.md

Servicios comunes

Nginx

<service>
  <id>nginx</id>
  <name>Nginx Server</name>
  <description>Servidor web Nginx como servicio de Windows</description>
  <executable>D:\nginx-1.22.1\nginx.exe</executable>
  <logpath>D:\nginx-1.22.1\logs</logpath>
  <log mode="none"/>
  <startmode>Automatic</startmode>
  <startarguments>-p D:\nginx-1.22.1\</startarguments>
  <stopexecutable>D:\nginx-1.22.1\nginx.exe</stopexecutable>
  <stoparguments>-p D:\nginx-1.22.1\ -s stop</stoparguments>
</service>

Etiquetas: WinSW java Windows Services .NET 7 service wrapper

Publicado el 9-16 06:09