运行时更改环境变量

13

如何在已经加载并启动的NodeJS进程中注入/更改当前环境变量?

暴露一个应用程序内部接口不是一个选项,重新启动也不是一个有效的选项。

该进程正在运行在Docker容器中,需要特定的NodeJS版本是可能的。

编辑:必须从应用程序源代码之外进行更改,因此无法执行process.env.ENV_VAR = "new env"

2个回答

12
无法修改正在运行进程的环境变量。这并不是NodeJS进程独有的特点,而是UNIX操作系统中环境变量的工作方式。变量位于进程的地址空间中。虽然通常在堆栈顶部附近的已知位置放置它们,但当前变量可能位于堆中的任意位置。环境变量是每个进程的私有信息。因此,除非程序提供API来更改其环境变量,否则无法修改程序运行时的环境变量。

即使有可能创建内核扩展,您仍然需要猜测特定变量的地址空间吗? - joachim
@joachim 大致正确。不仅要找到变量,这相对容易,因为有一个名为 environ 的全局变量指向环境变量的基础部分。问题是,除非您将一个特定的 var=value 替换为相同或更短长度的新字符串,否则无法改变该 blob。您不需要内核扩展来完成此操作。事实上,通过内核扩展进行操作会非常困难。您需要使用像 gdb 或 lldb 这样的调试器。 - Kurtis Rader

0

抱歉,问题可能有误导性。由于我没有任何控制权,因此更改不能从应用程序内部进行。 - joachim
然后,您应该使用REDIS,并在启动时从其存储中查询环境。 - Michele Della Mea
仍需要我对应用程序代码产生影响,而这完全超出了我的控制范围。 - joachim
好的,那就不可能了。因为你不能修改他的代码而影响他的环境。 - Michele Della Mea

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