2つの場所ではなく、1つの場所で環境変数を定義する方法はありますか?

2つの場所ではなく、1つの場所で環境変数を定義する方法はありますか?

Ubuntu 18.04を使用しています。システム全体(シェル経由)とApache-Pythonアプリケーション内でアクセスできるいくつかの環境変数を1か所で定義したいと思います。 /etc/profileで私が定義した

export MY_ENV_VAR1=envvar1
export MY_ENV_VAR2=myvalue1
...

それから/lib/systemd/system/apache2.serviceがあります。

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
Environment=MY_ENV_VAR1=envvar1
Environment=MY_ENV_VAR2=value1
...

Apache 構成ファイル (/etc/apache2/sites-available/000-default-le-ssl.conf) で次のように環境変数を設定しました。

    PassEnv MY_ENV_VAR1
    PassEnv DB_USER

これらの変数をある場所で定義し、あるファイルから別のファイルとして参照する方法はありますか?

答え1

1つの可能性は、/etc/environment変数を次の形式でファイルに入れることです。

MY_ENV_VAR1=envvar1
MY_ENV_VAR99="value with spaces"

これはpam_envログイン時に読み書きされます。 Apacheに同じファイルを読み取るには、次のようにします。

EnvironmentFile=/etc/environment

ユニットファイルのシステムデザイナーはこのキーワードを使用するのが好きではないので、いつかは廃止されているかもしれませんが、現実的には動作します。 pamとsystemdは特殊文字を同じ方法で解析しませんので、変数に特殊文字を使用するときは注意してください。

関連情報