CLOVER🍀

That was when it all began.

systemdのユニット定義ファイルで指定する、EnvironmentFileについて

systemdのユニット定義ファイルには、EnvironmentFileという要素を記述することができます。

こんな感じに。

[Service]
...
...
EnvironmentFile=/etc/default/foo

これで対象のサービスが使う環境変数をファイルとして定義して、読み込ませることができます。

ファイルの中身は、「環境変数=値」のように書きます。

MY_ENV_VAR=xxx

...

ところで、たまにファイルパスの先頭に「-」がついているものがあります。

[Service]
...
...
EnvironmentFile=-/etc/default/bar

これはなんでしょう?

ちょっと調べてみました。

systemd.exec(5) - Linux manual page

systemd.exec

$ man 5 systemd.exec

optionally prefixed with "-", which indicates that if the file does not exist, it will not be read and no error or warning message is logged.

指定したファイルが存在しない場合は読み取られず、エラーも警告も記録されないというオプションみたいです。

ところで、EnvironmentFileで指定するファイルはどこに置くのが良いのでしょう?

Debian系だと「/etc/default」ディレクトリ配下、Red Hat系だと「/etc/sysconfig」配下が良さそうな感じですね。

Debian ポリシーマニュアル / オペレーティングシステム

Debian ポリシーマニュアル / ファイル / 設定ファイル

10.6. systemd のユニットファイルの作成および変更 Red Hat Enterprise Linux 7 | Red Hat Customer Portal

覚えておきましょう。