我已经为它构建了一个应用程序和一个 systemd 单元。systemd 单元工作正常,但随着开发和生产环境的不同,我开始将配置移到环境变量中,但似乎无法让它们在 systemd 中工作。
我已经尝试过系统范围的环境变量,它们对操作系统可见,但对程序不可见,所以我开始考虑将它们构建到 systemd 单元中。
首先我尝试使用 EnvironmentFile
我创建了一个简单的环境文件
LCSQLH=localhost
LCSQLU=application
Run Code Online (Sandbox Code Playgroud)
在它作为/etc/lc.sh
和
[Unit]
Description=Service for this app
[Service]
EnvironmentFile=/etc/lc.sh
ExecStart=/usr/bin/env python /opt/app/__init__.py
Run Code Online (Sandbox Code Playgroud)
做了systemctl --system daemon-reload
但没有,我的应用程序出错:
Jan 27 14:24:59 machine.host env[630]: KeyError: 'LCSQLU'
我看到一些有:
EnvironmentFile=-/etc/lc.sh
我试过了……不……
所以我试着把它们单独放进去
[Service]
Environment="LCSQLH=localhost"
Environment="LCSQLU=application"
ExecStart=/usr/bin/env python /opt/app/__init__.py
Run Code Online (Sandbox Code Playgroud)
再一次,没有...
所以我听说了这样的想法,/etc/systemd/service_name.service.d
所以我在那里放了一个 service.conf 和环境(与上面的格式相同)但没有......
我的应用程序无法访问这些环境变量。
如果我导出它们(在我的 shell 中手动或使用 /etc/profile.d/)并直接运行我的应用程序,它就可以工作,所以这些不是被设置而不是应用程序问题。
这是 Centos 7.3,我选择了环境变量而不是硬编码的配置,因为它可以在 linux 或 windows 上运行,所以不想将配置文件埋在 /etc/ 中