pode-se usar comandos de script no campo systemd Environment?

3

Eu tenho um arquivo docker-compose que eu uso para iniciar vários contêineres para o meu serviço. Um desses contêineres requer que uma variável de ambiente seja definida (o ip público do servidor, para ser exato). O SO é um Ubuntu 15.10 Server vm recentemente instalado.

Estou tentando descobrir uma maneira de fornecer isso com o systemd. O melhor que eu tenho até agora é isto:

[Unit]
Description=service for my product
Requires=docker.service
After=docker.service

[Service]
Environment=MY_MASTER_IP='/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/''
Environment=MY_NETWORK_NAME="mynetwork"

Restart=always
ExecStart=/usr/local/bin/docker-compose -f /app/master/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /app/master/docker-compose.yml stop

[Install]
WantedBy=local.target

No entanto, quando eu uso systemd-analyze verify myapp.service systemd responde dizendo que a linha com o comando crazy shell é inválida e será ignorada.

[/lib/systemd/system/myapp.service:8] Invalid environment assignment, ignoring: MY_MASTER_IP='/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/')'

Eu também tentei colocar a atribuição da variável diretamente antes do comando docker-compose ( MY_MASTER_IP=blah blah blah /docker-compose yadda yadda ) como eu era capaz de fazer com o upstart, mas o systemd gostou disso ainda menos.

Assim, a linha do ambiente pode ser usada assim e, se não, qual seria a melhor / mais elegante / fácil maneira de lidar com isso?

    
por Kevin Milner 16.12.2015 / 22:44

1 resposta

5

Não, como as unidades systemd não são scripts de shell nem há suporte a substituição de comandos. esta é uma decisão de projeto intencional.

    
por 18.12.2015 / 07:36