几乎就是这样: 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/