答えは、変数が定数(つまり、ユニットを取得するユーザーによって変更されることはない)であるか、変数(ユーザーが設定することを想定)であるかによって異なります。
それはあなたのローカルユニットなので、境界はかなりぼやけており、どちらの方法でも機能します。ただし、配布を開始し/usr/lib/systemd/system
、最終的にはになる場合は、これが重要になります。
定数値
インスタンスごとに値を変更する必要がない場合はEnvironment=
、ユニットファイルに直接として配置することをお勧めします。
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
その利点は、変数がユニットとともに単一のファイルに保持されることです。したがって、ユニットファイルはシステム間で移動しやすいです。
変数値
ただし、sysadminが環境変数の値をローカルで変更することになっている場合、上記のソリューションはうまく機能しません。具体的には、ユニットファイルが更新されるたびに新しい値を設定する必要があります。
この場合、追加のファイルが使用されます。方法—通常、配布ポリシーに依存します。
特に興味深い解決策の1つは、/etc/systemd/system/myservice.service.d
ディレクトリを使用することです。他のソリューションとは異なり、このディレクトリはsystemd自体でサポートされているため、ディストリビューション固有のパスはありません。
この場合、次のようなファイルを配置して、/etc/systemd/system/myservice.service.d/local.conf
ユニットファイルの欠落部分を追加します。
[Service]
Environment="FOO=bar baz"
その後、systemdはサービスを開始するときに2つのファイルをマージします(systemctl daemon-reload
どちらかを変更した後を忘れないでください)。そして、このパスはsystemdによって直接使用されるため、これには使用しませんEnvironmentFile=
。
影響を受けるシステムの一部でのみ値を変更することになっている場合は、両方のソリューションを組み合わせて、ユニットに直接デフォルトを提供し、他のファイルにローカルオーバーライドを提供できます。
sysconfig
パスはFedoraに固有のものであると思いますが、質問はArch Linuxについてです。paluhの答えはもっと面白いと思う