У меня есть кластер CoreOS, в котором у меня есть служба SystemD, которая просто запускает контейнер Docker. Однако в целях гибкости я хочу, чтобы реестр Docker, из которого извлекается контейнер, был обнаружен при запуске службы, что я легко делаю с помощью Etcd (система обнаружения узлов из проекта CoreOS).
Итак, я попробовал это в обычном терминале, что просто дает мне такую команду /usr/bin/etcdctl get /services/registry
чтобы получить текущий IP-адрес реестра. И это работает! Но из службы SystemD команда возвращается как напечатанная, а не выполняется, как кто-то должен делать в сценарии оболочки с обратными кавычками. Я пробовал обратные кавычки, $()
и ${}
синтаксисы, но команда по-прежнему возвращается как есть.
Если у кого-то есть предложение, беру его :) Спасибо!
Если вы используете ExecStart /bin/sh -c "echo $(etcdctl ls /)"
он будет работать так, как вы хотите.
Вот полный файл модуля, использующий это: https://github.com/coreos/unit-examples/blob/master/simple-fleet/apache-discovery.2.service#L6