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 emExecStartPost
?
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 № 1Uma solução alternativa seria ter um arquivo bash como ponto de entrada, adicionar tudo o que você precisa nele e tudo funcionará magicamente