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.
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?