如何将curl的结果分配给systemdvariables?

我正在使用amazon web services服务器,并试图设置一个系统作业,将curl检索的AWS外部IP作为input。

 [Unit] Description=My example with AWS external IP Wants=network-online.target After=network-online.target [Service] Type=forking Environment=EXTERNAL_IP=$(/usr/bin/curl http://169.254.169.254/latest/meta-data/public-ipv4) ExecStart=/path/to/myexample $EXTERNAL_IP [Install] WantedBy=multi-user.target 

validation工具systemd-analyze verify myexample.service指示curl和环境分配有问题。

Invalid environment assignment, ignoring: EXTERNAL_IP=$(/usr/bin/curl http://169.254.169.254/latest/meta-data/public-ipv4)

如果我用硬编码的IPstringreplacecurl结果,我的守护进程将启动。 我怎样才能在我的系统作业中使用curl结果?

(首先,我假定你正在使用科恩或其前任之一)。

首先,systemd单元不是shell脚本,不能被shellparsing。 这就是为什么你不能只调用一个命令并将其输出用作环境variables。

但是, 您可以ExecStart= 调用一个shell ,这可能是启动和运行的最快方法。

 Type=simple ExecStart=/bin/bash -c '/usr/local/bin/turnserver -X $(/usr/bin/curl http://169.254.169.254/latest/meta-data/public-ipv4)' 

(在这个configuration中,你不应该用-o守护服务器)

你也可以编写一个脚本,你可以从ExecStartPre=调用ExecStartPre= ,它获取你的元数据,然后改变在守护进程启动前会发生的turnserver.conf