gpt4 book ai didi

node.js - 在 netns 中运行的 Node-Red 和 node.js 版本出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:23 25 4
gpt4 key购买 nike

我需要在我创建的netns中运行node-red。我在此命名空间中有一个专用调制解调器接口(interface),只有 node-red 有权访问。

我使用 Ubuntu 16.04 并安装了 npm -> 然后安装了 Node.js 的 nvm 版本管理器来安装 8.11.3,然后安装了 Node-Red 本身。

我只安装了 nvm 版本 8.11.3 并将其设置为默认值。我希望这是唯一可以在任何地方运行的版本。

Picture showing the output of nvm ls

当我从常规 shell 启动 Node-Red 时,它会使用 Node.js 版本 8.11.3 启动

当我在 netns 中启动 node-red 时,它也会使用 node.js 版本 8.11.3 启动 [我使用 -u/directory 选项与普通用户运行相同的流程]

问题:当我从自动 shell 脚本在 netns 中启动 node-red 时,它会使用 node.js 版本 4.9.1 启动 [我使用 -u/directory 选项与普通用户运行相同的流程]

Welcome to Node-RED
===================

21 Jun 11:42:15 - [info] Node-RED version: v0.18.7
21 Jun 11:42:15 - [info] **Node.js version: v4.2.6**
21 Jun 11:42:15 - [info] Linux 4.13.0-45-generic x64 LE

脚本中的启动行是:

ip netns 执行传感器node-red -u/home/iotdemo/.node-red

“sensor”是网络名称,-u 选项指向与普通用户相同的流目录。

为什么它会使用我尚未安装的 Node.js 版本启动?如何让它使用所需的 v8.11.3 启动?

我怀疑它与 root 与用户 (iotdemo) 有关,但它似乎在命名空间中启动一个进程,您必须以 root 身份执行此操作。

感谢您考虑这个问题。

最佳答案

通过安装 npm,您必须同时安装 NodeJS 作为先决条件(因为 npm 只是另一个 NodeJS 应用程序)。

这意味着您已经在系统级安装了版本 v4.2.6 的 NodeJS

nvm 只是混淆用户路径,在系统 bin 目录之前插入搜索路径(例如/bin/usr/bin/usr/local/bin),然后维护一组指向不同版本 NodeJS 的符号链接(symbolic link)。由于您将所有内容设置为用户 iotdemo,因此只有该用户才会启用 nvm 路径,这就是 root 用户仍然看到系统安装的 NodeJS 版本的原因。

最简单的选择是编写一个脚本,使用 su 以 iotdemo 用户身份运行 node-red 并将其传递给 ip netns exec 命令。

例如

#!/bin/bash
. ~/.nvm/nvm.sh
nvm exec 8.11.3 node-red

然后调用这个脚本

ip netns exec sensor su - iotdemo -c /path/to/script

参见this了解让 nvm 在脚本中工作的详细信息。

关于node.js - 在 netns 中运行的 Node-Red 和 node.js 版本出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com