Amazon-Web-Services

如何將 curl 的結果分配給 systemd 變數?

  • March 10, 2016

我正在使用 Amazon Web Service 伺服器,並嘗試設置一個 systemd 作業,該作業curl.

[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

驗證工具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)

如果我用curl硬編碼的 IP 字元串替換結果,我的守護程序就會啟動。如何curl在我的 systemd 工作中使用結果?

(首先,我假設您使用的是coturn或其前身之一。)

首先,systemd 單元不是 shell 腳本,也不會被 shell 解析。這就是為什麼您不能只呼叫命令並將其輸出用作環境變數的原因。

但是,可以呼叫 shellExecStart=,這可能是啟動和執行的最快方式。

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

(在此配置中,您不應使用.來守護 turnserver -o。)

您還可以編寫一個腳本,您可以從中呼叫ExecStartPre=它,它會獲取您的元數據,然後更改 turnserver.conf,這將在守護程序啟動之前發生。

引用自:https://serverfault.com/questions/762782