如何在Linux机器上设置环境变量以供服务使用

4
正在Linux机器上运行的my-service需要提供ENV_VAR环境变量。如果我在etc/environment文件中声明这个变量,它就能正常工作,命令如下: vim /etc/environment 然后添加一行: ENV_VAR="My Value" 最后用以下命令重新加载: source /etc/environment 然后可以使用以下命令重新启动my-service sudo service my-service stop sudo service my-service start 我想知道是否有其他方法来声明环境变量,而不必在etc/environment文件中声明ENV_VAR变量。

1
ENV_VAR="My Value" 添加到 my-service 或包含此服务的文件中。 - Cyrus
请澄清一下。或者更好的办法是,将其发布为答案,这样我们就可以投票支持它。 - alphanumeric
您的问题更适合在Unix & Linux Stack Exchange讨论。 - Cyrus
你正在使用哪个发行版?sudo service my-service stop 表明你没有使用 systemd。你使用的是哪个服务管理器(rc-init, systemd, sysvinit, upstart等)? - KamilCuk
Ubuntu DISTRIB_RELEASE=16.04。它附带了systemctl。我可以使用sudo systemctl start my-service来启动它,而不是sudo service my-service start。有没有一种方法可以使用命令行设置环境变量(而不会弄乱my-service.conf文件)? - alphanumeric
自从一段时间以来,Ubuntu使用systemd。因此,不要使用“service”,请使用“systemctl”。 - KamilCuk
3个回答

3
如果您的系统使用systemd来管理服务,可以从“环境”部分中添加到服务文件中,以声明环境变量以供服务使用。请参考systemd.exec文档
Environment="ENV_VAR=My Value"

不,那样做是错误的。服务的环境不应该依赖于它运行的环境。如果你想要传递参数到你的服务中,只需创建一个模板服务(my_service@argument.service)即可。或者,我猜你可以创建一个自定义配置的systemd服务文件作为解决方法,我见过一些脚本这样做。 - KamilCuk

3

如果您想添加一个环境变量(Environment Variable),可以进行以下操作:

  1. 编辑 /etc/enviroment 文件(适用于所有用户)
  2. 编辑 /etc/profile 文件(适用于所有用户)
  3. 编辑 ~/.bashrc 文件(仅适用于您自己)

编辑上述任何文件都将确保每次启动您的机器时,您的环境都可以访问这些变量。

您也可以编辑包含my-service的文件或my-service程序本身(由 Cyrus提出的建议)。这意味着,如果您对my-service程序的源代码或包含my-service程序调用之前的文件拥有写访问权限,您可以在该文件中添加一行。

甚至您不需要编辑文件!每当您启动终端时,只需输入您将要添加到上述任何一个文件中的文本作为命令,就可以实时更改环境。此环境更改就像~/.bashrc更改一样,只适用于当前用户。如果您计划执行sudo <command>,则需要先使用 sudo su 切换到超级用户,然后更改环境。

无论您是编辑文件还是输入命令,我建议使用以下代码行。export命令将确保my-service程序可以访问环境变量。

export ENV_VAR=value

相关问题


1
谢谢您的回答!但是在终端中使用export ENV_VAR=value设置环境变量,然后使用sudo service my-service start启动服务并不能使ENV_VAR对服务可用。 - alphanumeric
我应该提到用户帐户的差异。当你执行 sudo <command> 时,它以超级用户完成命令。你必须切换到超级用户账户 sudo su 然后 export ENV_VAR=value,最后执行 service my-service start。我将编辑我的解决方案以反映这一点。 - Lenna

0

即使您要为ASP.NET Core应用程序设置环境变量,也可以不使用引号来工作。

Environment=ASPNETCORE_ENVIRONMENT=Production ASPNETCORE_URLS=http://localhost:5001

您可以使用空格设置多个变量


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接