如何在 .service 脚本中使用环境变量

How to use environment variables in a .service script

我在 linux 服务器上有一个长生不老药项目。我创建了一个 .service 脚本,它将使用以下命令启动和停止应用程序

systemctl start "my_app".service
systemctl stop "my_app".service

.service 文件看起来像这样...

[Unit]
Description="example app_name daemon"

[Service]
Type=simple
User=root
Restart=on-failure
Environment=MIX_ENV=prod "PORT=4000"

WorkingDirectory="the file path to my app"

ExecStart=/usr/local/bin/mix phoenix.server

[Install]
WantedBy=multi-user.target

它按预期工作,唯一的例外是它不会读取环境变量。我可以通过手动将它们添加到脚本来授予应用程序对它们的访问权限,就像上面 PORT=4000 一样。

我想知道 .service 文件是否有办法访问我服务器上的环境变量,这样我就不必在每个文件中都编写它们 我在新的服务器上使用此脚本服务器。提前致谢

如果您想了解有关该项目的更多信息,请随时查看 the repo

您正在 [Service] 部分寻找 EnvironmentFile= 指令。

EnvironmentFile=/path/to/some/textFile

阅读 here 了解更多信息。

除了iamauser 所说的(这可能是您正在寻找的答案)之外,还有另一种方法可以在服务启动之前修改服务的环境变量。您可以使用 systemctl's environment commands。请注意,这将影响 systemd 的环境本身以及它启动的所有未来服务。使用它的坏理由多于好的理由,因此如果 iamauser 的解决方案足够,请避免使用它。