56
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

systemd の Environment / EnvironmentFile では変数展開できません

Posted at

systemd での Environment / EnvironmentFile では変数展開できません。
知らずにハマったので記事に残します。

現象

例えば、

/etc/systemd/system/sample.service
[Unit]
Description=Sample

[Service]
EnvironmentFile=/etc/default/sample
ExecStart=/bin/echo $VAR2

というようなサービスがあり、

/etc/default/sample
VAR1=word1
VAR2=$VAR1 word2

となっていた場合に表示されるのは、

$VAR1 word2

になります。

word1 word2

ではありません。

manページ では以下のように説明されています。

変数展開は文字列の中では実行されません。ただし、指定子展開は可能です。 $ という文字は特別な意味を持ちません。

対応方法

VAR1=word1
VAR2=word1 word2

のように自ら変数展開して記述する必要があります。

コマンドの実行結果を変数として使いたい場合

コマンドの実行結果を変数として使いたい場合に

VAR=$(command)

と記載しても

$(command)

と、そのまま出力されるだけです。

また、 ExecStart の中で

ExecStart=/bin/echo $(command)

と書いても同様です。

この場合の対応方法としては、

ExecStartPre=/bin/sh -c "/bin/systemctl set-environment VAR=$(command)"

というように、 ExecStartPresystemctlset-environment を利用することで、
ExecStart で利用することができます。

参考

56
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?