Korzystam z CoreOS, aby planować jednostki systemowe z flotą. Mam dwie jednostki ( firehose.service
i firehose-announce.service
. Próbuję firehose-announce.service
uruchomić i zatrzymać wraz z firehose.service
. Oto plik jednostki dla 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
Staram się używać BindsTo
z pojęciem, że uruchomienie i zatrzymanie firehose.service
również się uruchomi lub zatrzyma firehose-announce.service
. Ale to nigdy nie dzieje się poprawnie. Jeśli firehose.service
zostanie zatrzymany, firehose-announce.service
przejdzie w stan awarii. Ale kiedy zaczynam firehose.service
, firehose-announce.service
nie uruchamia się.
Co ja tu robię źle?
Odpowiedzi:
Wydaje mi się, że w końcu natknąłem się na prawidłową kombinację, aby uzyskać to, co trzeba.
W mojej
firehose-announce.service
jednostce ustawiłem tylkoBindsTo
. Cała jednostka to:Spowoduje to
firehose-announce.service
zatrzymanie urządzenia, kiedy to nastąpifirehose.service
. Świetny. Ale jak możemy zacząć od nowa?Odwracam zależność, aby być w mojej
firehose.service
jednostce tak:To znaczy, że
firehose.service
chcefirehose-announce.service
się uruchomić, kiedy to nastąpi (ale nie zawiedź, jeślifirehose-announce.service
nie można uruchomić). To także zapewnia, żefirehose.service
zacznie się wcześniejfirehose-announce.service
.Przetestowałem to i wydaje się, że teraz jednostki zatrzymują się i zaczynają razem zgodnie z życzeniem.
źródło
-
nie służy żadnemu celowi na ostatnim i służy tylko celowi na wszystkich oprócz ostatniego ExecStartPre