我使用的是 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
有没有什么方法可以让我只在一个地方定义这些变量,然后从一个文件到另一个文件引用它们?
答案1
一种可能性是将变量以/etc/environment
以下形式放入文件中
MY_ENV_VAR1=envvar1
MY_ENV_VAR99="value with spaces"
这些将在pam_env
登录时读取和导出。要让 apache 读取相同的文件,请使用
EnvironmentFile=/etc/environment
在单元文件中。请注意,systemd 设计者不喜欢使用此关键字,因此也许有一天它会被弃用,然后被删除,但为了务实,它目前是有效的。请注意在变量中使用任何特殊字符,因为 pam 和 systemd 不会以相同的方式解析它们。