【问题标题】:How to update ENV variables in a Process without restarting it (NodeJS)?如何在不重新启动进程(NodeJS)的情况下更新进程中的 ENV 变量?
【发布时间】:2018-12-28 23:29:28
【问题描述】:

我有一个在 NodeJS 上运行的服务器。有没有办法在不重启服务器的情况下更新进程中的环境变量?

我想做的是:

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

【问题讨论】:

  • 您使用的是什么进程管理器/操作系统?
  • 我使用的是 Mac OS

标签: node.js shell terminal process restart


【解决方案1】:

我正在尝试找到一个跨平台的答案(mac、linux、windows)

对于 mac,我发现的解决方法是使用

const shell = require("shelljs");  

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

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

【讨论】:

    【解决方案2】:

    Here's a good explanation 关于如何在 mac OS 中设置环境变量。此外,正如其他人已经回答的那样,您可以使用process.env.ANY_VARIABLE = 'some value' 设置它们。

    【讨论】:

      【解决方案3】:

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

      在 *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
      

      【讨论】:

        【解决方案4】:

        从编程的角度来看,您应该能够更新传递给正在运行的进程的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
        

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

        【讨论】:

          【解决方案5】:

          如果您对环境变量进行了更改,只有在您通过系统的主属性对话框进行更改时才会立即生效,该系统将转到我的计算机 -> 高级属性 -> 环境变量。

          除非我们在代码中明确处理,否则任何已经运行的程序都不会看到更改。

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

          【讨论】:

          • 这是我想要的,但我想看看是否有办法直接在控制台上执行此操作
          猜你喜欢
          • 1970-01-01
          • 2021-10-06
          • 2019-12-15
          • 1970-01-01
          • 2020-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-06
          相关资源
          最近更新 更多