Как мне присвоить результат curl переменной systemd?

Я использую сервер Amazon Web Service и пытаюсь настроить задание systemd, которое принимает в качестве входных данных внешний IP-адрес AWS, полученный с помощью 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-analysis verify myexample.service указывает на наличие проблемы с curl и назначением среды.

Недопустимое назначение среды, игнорирование: EXTERNAL_IP = $ (/ usr / bin / curl http://169.254.169.254/latest/meta-data/public-ipv4)

Если я заменю curl с жестко запрограммированной строкой IP, мой демон запускается. Как я могу использовать результат curl в моем задании systemd?

1
задан 10 March 2016 в 05:31
1 ответ

(Во-первых, я предполагаю, что вы используете coturn или одного из его предшественников.)

Для начала, системные модули не являются скриптами оболочки и не анализируются оболочкой. Поэтому вы не можете просто вызвать команду и использовать ее вывод в качестве переменной окружения.

Однако, вы можете вызвать оболочку из 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)'

(В этой конфигурации вы должны , а не даемонизировать турнесервер с помощью -o.)

Также можно написать скрипт, который можно вызвать из ExecStartPre=, который получит ваши метаданные и затем изменит turnserver.conf, что произойдет до того, как даемон будет запущен.

.
6
ответ дан 3 December 2019 в 16:44

Теги

Похожие вопросы