Amazon-Web-Services
如何將 curl 的結果分配給 systemd 變數?
我正在使用 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 解析。這就是為什麼您不能只呼叫命令並將其輸出用作環境變數的原因。
但是,您可以從呼叫 shell
ExecStart=
,這可能是啟動和執行的最快方式。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
,這將在守護程序啟動之前發生。