【问题标题】:Change ENV variables at runtime在运行时更改 ENV 变量
【发布时间】:2020-05-15 04:54:11
【问题描述】:

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

在应用程序中公开接口不是一个选项,重新启动也不是一个有效的选项。

该进程在 docker 容器内运行,可能需要特定的 NodeJS 版本。

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

【问题讨论】:

    标签: node.js environment-variables


    【解决方案1】:

    无法修改正在运行的进程的环境变量。这不是 NodeJS 进程独有的。这就是 env var 在类似 UNIX 的操作系统上的工作方式。变量存在于进程的地址空间内。虽然它们通常最初放置在堆栈顶部附近的众所周知的位置,但当前 var 可能位于堆中的任意地址。环境变量是有意为每个进程私有的。因此,除非程序提供了用于更改其环境变量的 API,否则您无法在程序运行后对其进行修改。

    【讨论】:

    • 所以即使有可能创建内核扩展,您仍然需要猜测特定变量的地址空间?
    • @joachim 这或多或少是正确的。这不仅仅是找到 var。这相对容易,因为有一个全局 environ var 指向 env var 的基础。问题是你不能改变那个 blob,除非你用一个长度相同或更短的新字符串替换一个特定的 var=value。您不需要为此进行内核扩展。事实上,通过内核扩展来做到这一点真的很难。你会想使用像 gdb 或 lldb 这样的调试器。
    【解决方案2】:

    您应该使用在存储了 env 的容器之间共享的 redis 存储。

    redis node repo - redis listen for changes

    【讨论】:

    • 抱歉,这个问题可能具有误导性。更改不能来自应用程序内部,因为我没有任何控制权。
    • 那么你应该使用 REDIS 并在启动时从它的 store 中查询 env
    • 仍然需要我对应用程序代码产生影响,这完全不受我的控制
    • 好吧,那是不可能的。因为你不能在不修改他的代码的情况下影响他的环境
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多