Я использую сервер 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?
(Во-первых, я предполагаю, что вы используете 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
, что произойдет до того, как даемон будет запущен.