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