node.js - 子进程未在 Node 的 PM2 下生成/工作

标签 node.js express digital-ocean

几乎就是这样: 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 无关。

Note 2 PM2 在我的本地 macOS 上,完全相同的版本 5.1.0 似乎工作正常。我认为这就是关于 Digital Ocean VPS 服务器的事情。可能是什么?

这在我的本地计算机上以及 Digital Ocean VPS 上都运行得很好,只要它不作为 pm2 进程运行

sudo pm2 start myapp

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

大家有什么想法吗?

谢谢

最佳答案

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

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

事实证明,当我们使用 PM2 fork 进程时,它不会选择 PWD(例如 /root/myapp),而该 PWD 会变为 未定义,从而导致 fs 操作和 exec 失败。

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

关于node.js - 子进程未在 Node 的 PM2 下生成/工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68585086/

相关文章:

javascript - 如何使用 Node.js 服务器部署 Angular 5 应用程序

node.js - 如何使用Sequelize.js建立表之间的多对多关系?

node.js - 使用来自 emberJs 的参数过滤器进行快速路由

node.js - 如何为reveal.js 设置我的socket.io 服务器?

python - Flask 网站 -- 500 内部服务器错误

ruby-on-rails - Dokku 域 :add <app> <domain> returns unsupported vhost config found. 禁用 vhost 支持

mysql - app.js 中的代码停止加载 CSS 资源

node.js - 更新子文档中的数组 - mongoose mongodb

javascript - 如何使用 Express 且仅使用 JEST 来测试 REST API?

node.js - 将变量从 .ejs 文件传递​​回express.js