J'utilise CoreOS pour planifier les unités systemd avec la flotte. J'ai deux unités ( firehose.service
et firehose-announce.service
. J'essaie d'obtenir le firehose-announce.service
démarrage et l'arrêt avec le firehose.service
. Voici le fichier d'unité pour 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
J'essaie d'utiliser BindsTo
avec la notion que le démarrage et l'arrêt de firehose.service
démarreront ou s'arrêteront également firehose-announce.service
. Mais cela ne se produit jamais correctement. Si firehose.service
est arrêté, firehose-announce.service
passe à l'état d'échec. Mais quand je commence firehose.service
, le firehose-announce.service
ne démarre pas.
Qu'est-ce que je fais mal ici?
Réponses:
Il semble que je sois finalement tombé sur la bonne combinaison pour que cela fonctionne comme souhaité.
Dans mon
firehose-announce.service
unité, je n'ai défini qu'unBindsTo
. L'unité entière est:Cela entraînera l'
firehose-announce.service
arrêt de l' unité lorsquefirehose.service
cela se produit. Génial. Mais comment recommencer?J'inverse la dépendance d'être dans mon
firehose.service
unité comme ceci:Cela veut dire qu'il
firehose.service
veutfirehose-announce.service
démarrer quand il le fait (mais n'échoue pas s'ilfirehose-announce.service
ne peut pas démarrer). Il s'assure également quefirehose.service
commence avantfirehose-announce.service
.J'ai testé cela et les unités semblent maintenant s'arrêter et démarrer ensemble comme souhaité.
la source
-
ne sert à rien sur le dernier et ne sert à rien sur tout sauf le dernier ExecStartPre