Veja algumas pequenas modificações:
- Como ele escuta em um soquete de rede, torne-o uma dependência de
network.target
. -
nohup
não é necessário, poissystemd
irá daemonizar o executável para você. - Eu acho que um script de shell separado seria um exagero, então apenas mescle-o no arquivo de serviço.
- Redirecionamento (
< /dev/null
e assim por diante) não é necessário, pois o systemd configura um contexto de E / S padrão apropriado. De fato, se você tomar o redirecionamento out , o systemd registrará qualquer coisa enviada para a saída padrão pelo programa Java em seu diário, sem necessidade de nenhum mecanismo de log especial. - A execução assíncrona do shell de chamada (
&
) não é necessária ou apropriada. - Existe um padrão de comportamento específico requerido por
Type=forking
, e se não for seguido pelo daemon, as coisas dão errado. Então, tenteType=simple
(ouType=notify
).
O arquivo de serviço é assim:
[Unit]
Description=Some job
After=network.target
[Service]
WorkingDirectory=/home/user/tmp/testout
SyslogIdentifier=SocketTest
ExecStart=/bin/sh -c "exec java -jar /home/user/programming/tests/java/core/SocketTest/SocketTest.jar"
User=dlt
Type=simple
[Install]
WantedBy=multi-user.target
Notas:
- Você não pode usar apenas
java
como o nome do programa a ser executado. O systemd não pesquisaPATH
para executáveis, e o nome do executável dado aExecStart
deve ser absoluto. Então, se você quiser uma busca de caminho, você precisa invocar através de um shell ou/usr/bin/env
. Nós escolhemos/bin/sh
aqui. - Como isso é
Type=simple
, o shell deveexec
Java, não executá-lo como um processo filho. O systemd controla o serviço através do processo principal e precisa ser Java, não um processo de shell pai. - Como isso não está chamando diretamente o executável Java, o systemd colocará o nome
sh
em seu diário como o nome do serviço. Consulte Como evitar que o / usr / bin / env seja marcado nos logs do systemd como o executável para saber mais sobre isso.
Até onde eu sei, não há nenhuma advertência especial de executar o aplicativo Java com o Systemd.