我有一个 CoreOS 集群,其中有一个只运行 Docker 容器的 SystemD 服务。但是,出于灵活性考虑,我希望在服务启动时发现容器所从中拉取的 Docker Registry,我使用 Etcd(来自 CoreOS 项目的节点发现系统)可以轻松做到这一点。
因此,我尝试在普通终端中执行此操作,它只给我一个这样的命令/usr/bin/etcdctl get /services/registry
来获取注册表的当前 IP 地址。而且它有效!但是从 SystemD 服务中,命令按键入的方式返回,而不是像在带有反引号的 Shell 脚本中那样执行。我尝试了反引号$()
和${}
语法,但命令仍然按原样返回。
如果有人有建议,我会采纳:)谢谢!
答案1
如果您使用 ExecStart,/bin/sh -c "echo $(etcdctl ls /)"
它将按照您希望的方式执行。
以下是利用此功能的完整单元文件: https://github.com/coreos/unit-examples/blob/master/simple-fleet/apache-discovery.2.service#L6