我正在使用 pm2 运行节点网络服务器。由于 pm2 生成另一个进程并将 stdout 和 stderr 重定向到文件,因此我必须在其他地方查找日志。理想情况下,我希望将节点进程输出到我运行 pm2 的同一控制台窗口。否则,我会选择 pm2 使用活动控制台窗口运行节点进程,并将节点进程的 stdout 和 stderr 写入该控制台窗口。如何才能实现这一目标?我在 Windows 机器上。
我相信您还可以看到由命令 pm2 logs
或 pm2 logs [app-name]
守护进程运行的进程的
stdout和
stderr。
您可以通过启动另一个终端/控制台并运行此命令来轻松实现这一点
pm2 log
将除 console.log 之外的所有内容记录到终端
pm2 logs
将所有内容记录到终端和 console.log
注意第二个命令中的“s”
找到答案(他们的文档不是那么好),只需添加
--no-daemon
标志,似乎已经完成了。尽管如此,它似乎仍在第一次正常运行时记录到文件(即使使用该标志)。一旦进程重新启动(我正在监视文件更改),它就会开始注销到控制台
以编程方式,您可以执行以下操作:
const pm2 = require('pm2')
pm2.connect(function(err) {
if (err) {
console.error(err);
process.exit(2);
}
pm2.start([
{
script : "server.js",
output: "/dev/stdout",
error: "/dev/stderr",
},
]
, function(err, proc) {
if(err) {
throw err
}
});
})
直接进入您要监控日志的正在运行的应用程序
pm2 logs <app id or app name> --lines 50
我认为
--attach
标志可能是这里最好的选择。
来自文档:
要启动应用程序并检查日志流,请使用 --attach 选项:
通过 Ctrl-C 退出时,应用程序仍将在后台运行。$ pm2 start api.js --attach
我想在基于 nginx 的 docker 容器的后台运行 pm2。在
/docker-entrypoint.d/
中添加了一个 shell 脚本,它只运行 ./node_modules/.bin/pm2-runtime start ./ecosystem.config.cjs &
。 & 使 pm2 在后台运行,但所有标准输出不受影响 - 它全部与正常的 nginx 标准输出混合在一起。