Systemd bifurcando scripts encadeados

1

Considere este cenário: Systemd Type = serviço de bifurcação inicia um script de shell, que por sua vez inicia outro script e sai, que então iniciará o processo de serviço / daemon real.

Agora o systemd considerará o serviço iniciado assim que o primeiro script sair e considerar o segundo script de shell como o serviço ou procurar pelo arquivo PID, se isso foi mencionado no arquivo de serviço. Meu dilema é que o primeiro script sai antes que o arquivo PID tenha sido criado pelo segundo script e o segundo script saia cerca de meio minuto depois, quando o processo real do serviço for finalmente iniciado.

Embora eu pudesse mesclar esses scripts de inicialização encadeados em teoria, eles são enviados com o serviço para o qual estou criando o arquivo de serviço systemd e prefiro não me misturar com isso para mantê-lo facilmente atualizável.

Então, basicamente, a pergunta é: Como faço para lidar com processos de bifurcação encadeados em um serviço systemd para que apenas a última bifurcação da cadeia seja considerada / monitorada pelo systemd?

Para referência: O software que causa esse problema é a versão mais recente do TeamCity, o servidor de CI da JetBrains.

Como eu sei que as pessoas do StackExchange gostam de amostras de código aqui, vamos com uma versão simplificada sem sentido: teamcity-server.service (arquivo Systemd Service):

[Unit]
Description=TeamCity server
After=network.target

[Service]
EnvironmentFile=/etc/conf.d/teamcity
ExecStart=/opt/teamcity/bin/teamcity-server.sh start
ExecStop=/opt/teamcity/bin/teamcity-server.sh stop
Type=forking
PIDFile=/opt/teamcity/logs/teamcity.pid
Restart=no
TimeoutSec=30
RemainAfterExit=yes
User=teamcity

[Install]
WantedBy=multi-user.target

teamcity-server.sh (este não é um script real, apenas mostrando como o script encadeado é executado):

#!/bin/sh
sh "script2.sh" "run" "$@" &
wait $!
EXIT_CODE=$?
exit $EXIT_CODE

script2.sh (também não é um script real, mostrando como lançamos o daemon java aqui):

#!/bin/sh
PIDFILE = "/opt/teamcity/logs/teamcity.pid"
java -jar somejavadaemon.jar
tc_pid=$?
echo $tc_pid > $PIDFILE
    
por Mastacheata 29.11.2017 / 01:55

0 respostas