首页 > 解决方案 > 子进程未在 PM2 下为 Node 生成/工作

问题描述

差不多就是这样: PM2下运行的Node APP无法运行子进程

但没有答案(并且 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 无关。

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

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

sudo pm2 start myapp

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

有人有想法么?

谢谢你

标签: node.jsexpressdigital-ocean

解决方案


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

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

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

我添加PWD=/root/myapp.env监控它,pm2 logs一切正常。


推荐阅读