像 Shell 脚本一样在 systemd 服务文件中获取命令返回

像 Shell 脚本一样在 systemd 服务文件中获取命令返回

我有一个 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

相关内容