Se você fizer o seu ExecStart usar /bin/sh -c "echo $(etcdctl ls /)"
, ele funcionará da maneira que você deseja.
Aqui está um arquivo de unidade completo aproveitando isso: link
Eu tenho um cluster CoreOS no qual eu tenho um serviço SystemD que apenas executa um contêiner Docker. No entanto, para fins de flexibilidade, quero que o Docker Registry do qual o contêiner seja retirado seja descoberto quando o serviço for iniciado, o que eu faço facilmente usando o Etcd (o sistema de descoberta de nós do projeto CoreOS).
Então, eu tentei em um terminal normal, o que só me dá um comando como este /usr/bin/etcdctl get /services/registry
para obter o endereço IP atual do registro. E isso funciona! Mas a partir de um serviço SystemD, o comando é retornado como digitado e não executado como alguém deve fazer em um script Shell com backticks. Eu tentei backticks, $()
e ${}
syntaxes, mas o comando ainda é retornado como está.
Se alguém tem uma sugestão, eu estou tomando :) Obrigado!
Se você fizer o seu ExecStart usar /bin/sh -c "echo $(etcdctl ls /)"
, ele funcionará da maneira que você deseja.
Aqui está um arquivo de unidade completo aproveitando isso: link