Назад | Перейти на главную страницу

Как мне присвоить результат 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-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?

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

Начнем с того, что модули systemd не являются сценариями оболочки и не анализируются оболочкой. Вот почему вы не можете просто вызвать команду и использовать ее вывод как переменную среды.

Тем не мение, ты жестяная банка называть оболочку из 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, что произойдет до запуска демона.