Ich benutze CoreOS, um systemd Einheiten mit Flotte zu planen. Ich habe zwei Einheiten ( firehose.service
und firehose-announce.service
ich versuche, das firehose-announce.service
zu starten und zu stoppen zusammen mit dem firehose.service
. Hier ist die Einheitendatei für 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
Ich versuche, BindsTo
mit dem Begriff zu verwenden, dass Start und Stopp von firehose.service
auch starten oder stoppen firehose-announce.service
. Das passiert aber nie richtig. Wenn firehose.service
gestoppt ist, firehose-announce.service
geht es in den fehlerhaften Zustand. Aber wenn ich anfange firehose.service
, firehose-announce.service
startet der nicht.
Was mache ich hier falsch?
Antworten:
Ich scheine endlich über die richtige Kombination gestolpert zu sein, um dies wie gewünscht zum Laufen zu bringen.
In meinem
firehose-announce.service
Gerät stelle ich nur einBindsTo
. Die gesamte Einheit ist:Dadurch
firehose-announce.service
stoppt das Gerät, wenn dies derfirehose.service
Fall ist. Groß. Aber wie fangen wir es wieder an?Ich kehre die Abhängigkeit um, um in meiner
firehose.service
Einheit zu sein:Dieser sagt , dass
firehose.service
willfirehose-announce.service
bis beginnen , wenn es funktioniert (aber nicht scheitern , wennfirehose-announce.service
nicht gestartet werden kann). Es stellt auch sicher, dass esfirehose.service
vorher startetfirehose-announce.service
.Ich habe dies getestet und die Einheiten scheinen nun wie gewünscht zusammen anzuhalten und zu starten.
quelle
-
dienen auf dem letzten keinen Zweck und nur Zweck dient auf alle , aber die letzten ExecStartPre