Я использую CoreOS для планирования системных модулей с флотом. У меня есть два устройства ( firehose.service
и firehose-announce.service
. Я пытаюсь заставить firehose-announce.service
их запускаться и останавливаться вместе с firehose.service
. Вот файл модуля для 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
Я пытаюсь использовать BindsTo
с понятием, что запуск и остановка firehose.service
также будут запускаться или останавливаться firehose-announce.service
. Но это никогда не происходит правильно. Если firehose.service
остановлен, то firehose-announce.service
переходит в сбойное состояние. Но когда я начинаю firehose.service
, firehose-announce.service
не запускается.
Что я здесь не так делаю?
Ответы:
Я, кажется, наконец-то наткнулся на правильную комбинацию, чтобы заставить это работать как хотелось.
В моем
firehose-announce.service
блоке я только установилBindsTo
. Весь блок это:Это приведет
firehose-announce.service
к остановке устройства, когда этоfirehose.service
произойдет. Отлично. Но как мы можем начать это снова?Я изменяю зависимость, чтобы быть в моем
firehose.service
модуле, вот так:Это говорит о том, что
firehose.service
хочетfirehose-announce.service
запустить, когда это происходит (но не терпит неудачу, еслиfirehose-announce.service
не может начать). Это также гарантирует, чтоfirehose.service
начинается раньшеfirehose-announce.service
.Я проверил это, и теперь кажется, что блоки останавливаются и запускаются вместе, как хотелось.
источник
-
не имеет смысла для последнего и служит только для всех, кроме последнего ExecStartPre