Estou usando o CoreOS para agendar unidades systemd com frota. Eu tenho duas unidades ( firehose.service
e firehose-announce.service
. Estou tentando firehose-announce.service
iniciar e parar firehose.service
o arquivo. Aqui está o arquivo da unidade para firehose-announce.service
:
[Unit]
Description=Firehose etcd announcer
BindsTo=firehose@%i.service
After=firehose@%i.service
Requires=firehose@%i.service
[Service]
EnvironmentFile=/etc/environment
TimeoutStartSec=30s
ExecStartPre=/bin/sh -c 'sleep 1'
ExecStart=/bin/sh -c "port=$(docker inspect -f '{{range $i, $e := .NetworkSettings.Ports }}{{$p := index $e 0}}{{$p.HostPort}}{{end}}' firehose-%i); echo -n \"Adding socket $COREOS_PRIVATE_IPV4:$port/tcp to /firehose/upstream/firehose-%i\"; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /firehose/upstream/firehose-%i $COREOS_PRIVATE_IPV4:$port --ttl 300 >/dev/null; sleep 200; done"
RestartSec=30s
Restart=on-failure
[X-Fleet]
X-ConditionMachineOf=firehose@%i.service
Eu estou tentando usar BindsTo
com a noção de que iniciar e parar firehose.service
também irá iniciar ou parar firehose-announce.service
. Mas isso nunca acontece corretamente. Se firehose.service
estiver parado, firehose-announce.service
passa ao estado de falha. Mas quando eu começo firehose.service
, o firehose-announce.service
não inicia.
O que eu estou fazendo errado aqui?
Respostas:
Parece que finalmente encontrei a combinação correta para fazer isso funcionar como desejado.
Na minha
firehose-announce.service
unidade, apenas defino aBindsTo
. Toda a unidade é:Isso fará com que a
firehose-announce.service
unidade pare quando pararfirehose.service
. Ótimo. Mas como começamos de novo?Eu inverto a dependência de estar na minha
firehose.service
unidade da seguinte forma:Isto está dizendo que
firehose.service
querfirehose-announce.service
iniciar quando isso acontecer (mas não falhe sefirehose-announce.service
não puder iniciar). Ele também garante que o processo sejafirehose.service
iniciado antesfirehose-announce.service
.Testei isso e as unidades agora parecem parar e começar juntas, conforme desejado.
fonte
-
não servem de nada sobre o último e só servem propósito em todos, mas o último ExecStartPre