如何在不重启进程的情况下更新ENV变量(NodeJS)?

时间:2018-07-20 15:44:52

标签: node.js shell terminal process restart

我有一台运行在NodeJS上的服务器。是否可以在不重启服务器的情况下更新进程中的环境变量?

我想要做的是:

  1. 启动服务器npm start
  2. type something into the console to update ENV variable
  3. 服务器使用新的环境变量重新启动

5 个答案:

答案 0 :(得分:1)

如果对环境变量进行更改,则只有在通过要进入我的计算机的系统的“属性”主对话框中进行更改时,这些更改才会立即发生->高级属性->环境变量。

任何正在运行的程序都不会看到更改,除非我们在代码中显式处理它。

其背后的逻辑是,有一个代理发送广播WM_SETTINGCHANGE消息并对所有应用程序进行更改,以通知该更改。

答案 1 :(得分:1)

从编程的角度来看,您应该能够更新传递给正在运行的进程的process.env变量。

例如,运行:

cmd_line$: MY_VALUE=some_val node ./index.js

包含代码:

console.log(process.env.MY_VALUE)
process.env.MY_VALUE = 'some other value'
console.log(process.env.MY_VALUE)
process.env.MY_VALUE = 4
console.log(process.env.MY_VALUE)

终端输出:

some_val
some other value
4

从服务器管理员的角度来看,已经运行的应用程序,我不知道答案。

答案 2 :(得分:1)

可以调试Node.js进程并更改全局变量:

debug

在* nix上,即使未在调试模式下启动进程,也可以启用调试。在Windows上,只能调试以node --inspect开始的进程。 This article详细说明了这两种可能性。

显然,只有在始终将环境变量始终用作process.env.FOO的情况下,此方法才有效。

如果最初使用它们的值,则以后更改process.env.FOO可能不会有任何影响:

const FOO = process.env.FOO;
...
console.log(FOO); // it doesn't matter whether process.env.FOO was changed at this point

答案 3 :(得分:0)

Here's a good explanation,了解如何在Mac OS中设置环境变量。另外,正如其他人已经回答的那样,您可以使用process.env.ANY_VARIABLE = 'some value'进行设置。

答案 4 :(得分:0)

我正在尝试找到针对此问题的跨平台答案(mac,linux,windows)

对于Mac,我发现的一种解决方法是使用

const shell = require("shelljs");  

console.log(shell.exec('launchctl getenv TEST'));

仅当您使用launchctl setenv TEST blahblah设置环境变量(例如,在其他终端选项卡中)时,它才有效