¿Sabias que con Spring Boot podés hacer que los jars sean ejecutables como servicios Linux? Tener tu aplicación como servicio facilita la administración de las operaciones de inicio y detención, además de poder configurarla para que se inicie automáticamente durante el inicio del sistema operativo.

Requisitos previos

  • Tu aplicación tiene que usar Spring Boot
  • Tu aplicación tiene que compilarse a un JAR

Configuración del POM

Primero tenes que agregar en el pom del proyecto la siguiente configuración:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

Ahora tu jar es un ejecutable y podés correrlo haciendo ./mi-app.jar.

Poner tu aplicación como servicio de Linux

Para que se ejecute como un servicio, simplemente tenes que crear un link del jar en /etc/init.d para soportar los comandos estándar (start, stop, restart, status):

sudo ln -s /mi-app.jar /etc/init.d/mi-app

Ejecución

Y entonces podés hacer:

$ service mi-app start

La aplicación se ejecuta con el usuario al que pertenece el archivo (lo cual es muy útil para el inicio automático, ya que es importante evitar ejecutar servicios como root).

Si tu aplicación falla podés ver los logs del standard output en:

/var/log/mi-app.log

Y también el process id con el que se esta ejecutando el jar en:

/var/run/mi-app/mi-app.pid

Configuración para que se inicie automáticamente

Ahora que la aplicación es un servicio, podemos hacer que se inicie automáticamente cuando bootea el sistema operativo. Para esto:

sudo chkconfig mi-app on

Documentación

Si querés profundizar en el tema mirá más información en la documentación de Spring Boot.

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw