/ / Tornar o comando ExecStartPost para executar em segundo plano - linux, fork, systemd, consul, consul-template

Faça o comando ExecStartPost rodar em background - linux, fork, systemd, consul, consul-template

eu tenho um systemd serviço para meu aplicativo de inicialização de primavera conectado ao consul servidor, atrás haproxy. consul fornece consul-template para atualizar automaticamente o local do serviço em haproxy arquivo de configuração via consul-template comando.

consul-template pega um arquivo de modelo e grava no arquivo de configuração final do haproxy e, em seguida, recarrega o haproxy.

Agora, consul-template O processo precisa ser executado em segundo plano sempre junto com meu aplicativo, para que, à medida que o aplicativo apareça, ele possa detectar a inicialização do novo aplicativo e atualizar sua localização no arquivo de configuração.

Aqui está o meu systemd arquivo de serviço para isso.

[Unit]
Description=myservice
Requires=network-online.target
After=network-online.target

[Service]
Type=forking
PIDFile=/home/dragon/myservice/run/myservice.pid
ExecStart=/home/dragon/myservice/bin/myservice-script start
ExecReload=/home/dragon/myservice/bin/myservice-script reload
ExecStop=/home/dragon/myservice/bin/myservice-script stop
ExecStartPost=consul-template -template "/etc/haproxy/haproxy.cfg.template:/etc/haproxy/haproxy.cfg:sudo systemctl reload haproxy"
User=dragon

[Install]
WantedBy=multi-user.target

Agora, quando eu começo systemctl start myservice, meu aplicativo inicia e a chamada para consul-template também funciona, mas consul-template processo não entra em segundo plano. Tenho que pressionar Ctl+C e depois systemctl volta e tenho meu processo de inscrição e modelo de cônsul em execução.

Existe uma maneira de executar o consul-template processo em segundo plano especificado em ExecStartPost?

Eu estava tentando adicionar & no final de ExecStartPost comando, mas então consul-template reclama que é um argumento adicional inválido e falha.

Eu também estava tentando fazer o comando como /bin/sh -c "consul-template command here...", mas isso também não funciona. nohup neste comando não estava funcionando.

Qualquer ajuda é muito apreciada.

Respostas:

1 para resposta № 1

Uma solução alternativa seria ter um arquivo bash como ponto de entrada, adicionar tudo o que você precisa nele e tudo funcionará magicamente