【问题标题】:child process not spawned/working under PM2 for Node子进程未在 PM2 下为 Node 生成/工作
【发布时间】:2021-07-30 03:24:01
【问题描述】:

几乎是这样的: Node APP running under PM2 unable to run child process

但没有答案(并且 OP 的重启对我不起作用)

我有以下问题:

NodeJS / Express 应用程序 以npm run dev 运行而不将其转换为后台进程时工作正常

应用在内部生成一个子进程,如下所示:

 let exec = util.promisify(require("child_process").exec)
 const ret = await exec(ps, encoding: "utf-8"})

注意:我用execSync尝试了同步版本,同样的问题仍然存在,所以它似乎与async/await无关。

注意 2 PM2 在我的本地 macOS 上,完全相同的版本 5.1.0 似乎工作正常。所以我认为这与 Digital Ocean VPS 服务器有关。会是什么?

只要不是作为 pm2 进程运行,这在我的本地机器和 Digital Ocean VPS 上都可以正常工作

sudo pm2 start myapp

没有错误消息,什么都没有 - 该应用程序运行良好并且可以执行其他所有操作,除了我需要执行 exec 来运行命令的部分。超级郁闷!

有人有什么想法吗?

谢谢

【问题讨论】:

  • 我假设你的 VPS 是一台 linux 机器,对吧?
  • @slebetman 我解决了这个问题并添加了答案

标签: node.js express digital-ocean


【解决方案1】:

我解决了这个问题。为了他人的利益回答我自己的问题。

问题是我使用 process.env.PWD 在代码中创建了一个路径 - 这在我的本地主机中有效,并且在不作为 PM2 运行时也有效。

事实证明,当我们使用 PM2 分叉进程时,它不会选择 PWD(例如 /root/myapp),它会变成 undefined 导致 fs 操作和 exec 失败。

我在.env 中添加了PWD=/root/myapp,并使用pm2 logs 对其进行了监控,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多