Estoy usando CoreOS para programar unidades systemd con flota. Tengo dos unidades ( firehose.service
y firehose-announce.service
. Estoy tratando de firehose-announce.service
iniciar y detener junto con el firehose.service
. Aquí está el archivo de la unidad 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
Estoy tratando de usar BindsTo
con la idea de que start y stop firehose.service
también comenzará o se detendrá firehose-announce.service
. Pero esto nunca sucede correctamente. Si firehose.service
se detiene, firehose-announce.service
pasa al estado fallido. Pero cuando comienzo firehose.service
, firehose-announce.service
no se inicia.
¿Qué estoy haciendo mal aquí?
Respuestas:
Parece que finalmente me topé con la combinación correcta para que esto funcionara como lo deseaba.
En mi
firehose-announce.service
unidad solo configuro unBindsTo
. Toda la unidad es:Esto hará que la
firehose-announce.service
unidad se detenga cuando lofirehose.service
haga. Excelente. Pero, ¿cómo lo iniciamos de nuevo?Invierto la dependencia para estar en mi
firehose.service
unidad así:Esto significa que
firehose.service
quierefirehose-announce.service
iniciarse cuando lo hace (pero no falle sifirehose-announce.service
no puede iniciarse). También se asegura de quefirehose.service
comience antesfirehose-announce.service
.Probé esto y las unidades ahora parecen detenerse y comenzar juntas como se desea.
fuente
-
no sirve para nada en el último y solo sirve para todo excepto el último ExecStartPre