Environment="USER=ubuntu" "Path=/home/ubuntu/console/bin" WorkingDirectory=/home/ubuntu/console/bin ExecStart=/bin/sh -ec "exec /sbin/start-stop-daemon -S -c ${USER} -d ${Path} --pidfile=/var/run/console.pid --oknodo --exec consoleExecutable " #2>/dev/null ExecStop=/bin/sh -ec "exec /sbin/start-stop-daemon -K --quiet -c ${USER} -d ${Path} --pidfile=/var/run/console.pid --retry=TERM/30/KILL/5 --oknodo --exec consoleExecutable" #2>/dev/null
Isso é quase digno da Casa do Horror. Se não houvesse uma história de terror lá que faz isso.
Não use start-stop-daemon
em uma unidade de serviço para fazer todas as coisas que uma unidade de serviço já faz . Com arquivos PID desnecessários e a suposição equivocada de que ExecStart
aceita comentários de sintaxe de shell, não menos que isso.
E não faça o que a outra resposta diz e tente contê-la com Type=forking
. Isso piora as coisas, não melhor.
O absurdo com start-stop-daemon
é porque as coisas estão indo mal. Como o processo que está executando start-stop-daemon
não se torna o serviço, mas na verdade sai muito imediatamente, o systemd está pensando que seu serviço está encerrando. Na sua primeira systemctl status
output, você pode ver que o systemd está no meio do envio de SIGTERM
para limpar todos os processos que sobraram em execução após executar a ação ExecStop
, que é o que faz quando pensa que um serviço terminou.
Basta fazer as coisas de maneira simples:
Type=simple WorkingDirectory=/home/ubuntu/console/bin User=ubuntu ExecStart=/home/ubuntu/console/bin/consoleExecutable
Não é necessário ExecStop
nem Environment
.
Leitura adicional
- Jonathan de Boyne Pollard (2015). Você realmente não precisa daemonizar. Realmente. . A Casa do Horror.
- Jonathan de Boyne Pollard (2016). Se você tiver dois serviços, defina dois serviços. . A Casa do Horror.
- Jonathan de Boyne Pollard (2015). Problemas de protocolo de preparação com o Unix dæmons . Respostas frequentemente dadas.
- Systemd mata o serviço imediatamente após o início