Como eu atribuo o resultado do curl a uma variável systemd?

1

Estou usando um servidor Amazon Web Service e estou tentando configurar um trabalho systemd que usa como entrada IP externo da AWS recuperado por 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

A ferramenta de verificação systemd-analyze verify myexample.service indica que há um problema com curl e a atribuição de ambiente.

Invalid environment assignment, ignoring: EXTERNAL_IP=$(/usr/bin/curl http://169.254.169.254/latest/meta-data/public-ipv4)

Se eu substituir o resultado curl por uma string IP codificada, meu daemon será iniciado. Como posso usar o resultado curl no meu trabalho do systemd?

    
por mattm 10.03.2016 / 04:22

1 resposta

6

(Primeiro, presumo que você esteja usando coturn ou um de seus predecessores.)

Para começar, as unidades systemd não são scripts de shell e não são analisadas por um shell. É por isso que você não pode simplesmente chamar um comando e usar sua saída como uma variável de ambiente.

No entanto, você pode chamar um shell de ExecStart= , que pode ser o caminho mais rápido para começar a usar.

Type=simple
ExecStart=/bin/bash -c '/usr/local/bin/turnserver -X $(/usr/bin/curl http://169.254.169.254/latest/meta-data/public-ipv4)'

(Nesta configuração você deve não daemonizar o servidor de turnos com -o .)

Você também pode escrever um script, do qual pode chamar de ExecStartPre= , que busca seus metadados e, em seguida, altera turnserver.conf , que ocorreria antes do daemon ser iniciado.

    
por 10.03.2016 / 05:27