systemd環境フィールドでスクリプトコマンドを使用できますか?

systemd環境フィールドでスクリプトコマンドを使用できますか?

私のサービスのために複数のコンテナを起動するdocker-composeファイルがあります。これらのコンテナの1つには、環境変数セット(正確にはサーバーのパブリック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デバイスはシェルスクリプトではなく、コマンドの置き換えをサポートしていないためです。これは意図的なデザイン決定です。

おすすめ記事