Executando um processo Java do Systemd

14

Estou tentando executar um script de shell do systemd. O script é executado bem na linha de comando.

O script (runServer.sh), executa um processo Java e se parece com isso:

#!/bin/bash
java -jar -Dresources=/home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar "0" "Test"

Dentro de /usr/lib/systemd/system (ou /lib/systemd/system/ em outros sistemas operacionais) Eu criei um arquivo de serviço (myService.service):

[Unit]
Description=My Servers service
[Service]
ExecStart=/home/pruss/dev/ServerDeploy5-4.1/Server/runServer.sh
User=root
Type=oneshot
[Install]
WantedBy=multi-user.target

O resultado

Job for myService.service failed. See "systemctl status myService.service" and "journalctl -xn" for details.

Eu tento:

systemctl status myService.service


   Loaded: loaded (/usr/lib/systemd/system/myService.service; disabled)
   Active: failed (Result: exit-code) since Thu 2015-07-23 12:27:38 BST; 26s ago
   Main PID: 28413 (code=exited, status=203/EXEC)
    
por wax_lyrical 23.07.2015 / 13:31

5 respostas

11

Não tenho certeza de quem desprezou isso.

Encontrei a solução e a publiquei para poupar os outros do esforço.

O que você vê acima funciona. No entanto, o serviço final é assim:

[Unit]
Description=MyProgramThing
[Service]
ExecStart=/home/prus/dev/Blah-4.1/Server/runServer.sh
Type=simple
User=prus
[Install]
WantedBy=multi-user.target

Importante, dentro do meu script de shell, eu precisava colocar o caminho completo no arquivo .jar. java -jar /home/myprog.jar etc

i.e. ./myJar.jar não funcionou. Espero que ajude.

    
por 23.07.2015 / 15:59
10

Você pode não precisar do script de shell. Você pode iniciar o processo a partir do arquivo myService.service, desde que você use o caminho completo para o binário java e o arquivo jar. Deve ser algo como

ExecStart=/usr/bin/java -jar /home/pruss/dev/ServerDeploy5-4.1/Server/resources/MyServer.jar

Funciona no CentOS 7.2.

    
por 25.05.2016 / 23:20
5

Dê uma olhada na minha resposta em stackoverflow, que detalha como criar um serviço systemd para um aplicativo Java:

link

    
por 13.07.2016 / 22:22
0

Eu tive o mesmo problema (code = exited, status = 203 / EXEC).

Não se esqueça de conceder permissões de execução de script ao usuário.

Você pode querer alterar o 777 para algo mais restritivo.

chmod 777 /home/yourscript.sh

ou

chmod u+x /home/yourscript.sh

Então:

systemctl daemon-reload 
systemctl start yourScript.service 
systemctl enable yourScript.service
    
por 26.01.2016 / 17:05
0

Você pode precisar adicionar um WorkingDirectory = para saber onde executar as coisas.

    
por 26.09.2018 / 00:35