systemd 환경 필드에서 스크립트 명령을 사용할 수 있습니까?

systemd 환경 필드에서 스크립트 명령을 사용할 수 있습니까?

내 서비스를 위해 여러 컨테이너를 시작하는 docker-compose 파일이 있습니다. 이러한 컨테이너 중 하나에는 환경 변수 세트(정확하게는 서버의 공용 IP)가 있어야 합니다. 운영 체제는 새로 설치된 Ubuntu 15.10 Server 가상 머신입니다.

나는 systemd를 통해 이 기능을 제공하는 방법을 찾으려고 노력 중입니다. 지금까지 내가 생각해낸 최고는 다음과 같습니다.

[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

그러나 systemd를 사용하면 systemd-analyze verify myapp.servicecrazy shell 명령이 포함된 행이 유효하지 않으며 무시될 것이라는 메시지가 표시됩니다.

[/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'/')`

또한 upstart에서 했던 것처럼 docker-compose 명령( ) 바로 앞에 변수 할당을 시도했지만 MY_MASTER_IP=blah blah blah /docker-compose yadda yaddasystemd는 이를 더욱 좋아하지 않았습니다.

그럼 환경선을 이렇게 사용해도 될까요? 그렇지 않다면 이를 처리하는 가장 좋고/가장 우아하고/가장 쉬운 방법은 무엇입니까?

답변1

아니요, systemd 장치는 쉘 스크립트가 아니며 명령 대체를 지원하지 않기 때문입니다. 이는 의도적인 디자인 결정입니다.

관련 정보