Spring boot como serviço no linux
Como rodar aplicações JAVA como serviço SYSTEMD
Iniciando:
- Criar pasta do projeto, baixar projeto pronto
$ mkdir springBootAsService && cd springBootAsService && curl https://start.spring.io/starter.tgz -d dependencies=webflux,actuator | tar -xzvf -
Agora podemos fazer o build do projeto:
$ ./mvnw install
Para ver se tudo deu certo, basta ver se foi gerado um arquivo jar:
$ ls -l target/*.jar
-rw-r--r-- 1 root root 19463334 Nov 15 11:54 target/demo-0.0.1-SNAPSHOT.jar
Caso queira rodar localmente o projeto e testar os endpoints do actuator, basta inciar com:
$ java -jar target/*.jar
Testando os endpoints dos actuator:
$ curl localhost:8080/actuator | jq .
Agora que já temos nossa aplicação, vamos ao que precisaremos para rodar ela como serviço.
Vamos usar aqui SYSTEMD e você vai precisar estar logado como root.
Primeiro vamos criar uma pasta aonde vai conter o jar da aplicação e um script .sh. Aqui criei na home, mas pode ser em qualquer pasta:
$ mkdir ~/springboot-service$ cp ./target/demo-0.0.1-SNAPSHOT.jar ~/springboot-service/
Vamos criar então, nosso arquivo run-as-service.sh
dentro dessa pasta também, com o seguinte conteúdo:
$ sudo vi ~/springboot-service/run-as-service.sh
Já podemos testa-lo, rodando o seguinte comando:
$ chmod 777 run-as-service.sh
$ ./run-as-service.sh start & tail -f myService.out
Caso queira ver o status e/ou parar, só adicionar os parâmetros após o sh:
./run-as-service.sh status
./run-as-service.sh stop
Agora vamos criar um arquivo, que executará como serviço, chamado de SpringBootApp.service
dentro de /etc/systemd/system/
com o conteúdo (se atente ao path, e subistitua para o seu path absoluto:
sudo vi /etc/systemd/system/spring-boot.service
E pronto! Agora podemos iniciar, ver status e parar o service com os seguintes comandos:
sudo systemctl start spring-boot.service
sudo systemctl status spring-boot.service
sudo systemctl stop spring-boot.service
Fontes:
Agradecimento ao
pela ajuda/suporte quando desenvolvi essa tarefa e por me incentivar a escrever/compartilhar aqui. :)