Shell

有沒有一種方法可以在一個地方而不是兩個地方定義我的環境變數?

  • November 26, 2020

我正在使用 Ubuntu 18.04。我想在一個地方定義一些環境變數,這些環境變數既可以在系統範圍內(通過 shell)訪問,也可以在我的 Apache-Python 應用程序中訪問。在 /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

有什麼方法可以只在一個地方定義這些變數,然後從一個文件中引用它們?

一種可能性是將變數放在文件/etc/environment中的形式

MY_ENV_VAR1=envvar1
MY_ENV_VAR99="value with spaces"

這些將pam_env在登錄時讀取和導出。要讓 apache 讀取相同的文件,請使用

EnvironmentFile=/etc/environment

在單元文件中。請注意,systemd 設計者不喜歡使用這個關鍵字,所以也許有一天它會被棄用,然後被刪除,但為了務實,它現在可以工作。小心在變數中使用任何特殊字元,因為 pam 和 systemd 不會以相同的方式解析它們。

引用自:https://unix.stackexchange.com/questions/621681