我有一个 NodeJS 服务器在我开始的后台运行:
NODE_ENV=production npm start >> stdout.txt 2>> stderr.txt &
当我重新启动它时:kill <node process id>; NODE_ENV=production npm start >> stdout.txt 2>> stderr.txt &
我有时会在日志中看到一个很长的错误:/opt/bitnami/nodejs/bin/.node.bin[8878]: ../src/node.cc:663:void node::ResetStdio(): 断言 `(0) == (err)' 失败。
1: 0x9ef190 Node::Abort() [/opt/bitnami/nodejs/bin/.node.bin]
2:0x9ef217 [/opt/bitnami/nodejs/bin/.node.bin]
3: 0x9bd657 Node::ResetStdio() [/opt/bitnami/nodejs/bin/.node.bin]
4: 0x9bd6c0 Node::SignalExit(int) [/opt/bitnami/nodejs/bin/.node.bin]
5:0x7fca6718e390 [/lib/x86_64-linux-gnu/libpthread.so.0]
6:0x7fca66ebaad3 epoll_wait [/lib/x86_64-linux-gnu/libc.so.6]
7:0x13200b0 [/opt/bitnami/nodejs/bin/.node.bin]
8: 0x130e26b uv_run [/opt/bitnami/nodejs/bin/.node.bin]
9: 0xa31ec3 Node::NodeMainInstance::Run() [/opt/bitnami/nodejs/bin/.node.bin]
10: 0x9c1cc8 Node::Start(int, char**) [/opt/bitnami/nodejs/bin/.node.bin]
11: 0x7fca66dd3840 __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6]
12:0x95c085 [/opt/bitnami/nodejs/bin/.node.bin]
中止(核心转储)
npm 错误!代码生命周期
npm 错误!错误号 134
npm 错误! App@0.0.1 开始:`node app.js`
npm 错误!退出状态 134
npm 错误!
npm 错误! App@0.0.1 启动脚本失败。
npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。
npm 错误!可以在以下位置找到此运行的完整日志:
npm 错误!/home/bitnami/.npm/_logs/2020-12-17T21_05_41_838Z-debug.log
npm[8862]: ../src/node.cc:663:void node::ResetStdio(): 断言 `(0) == (err)' 失败。
1: 0x9ef190 Node::Abort() [npm]
2:0x9ef217 [npm]
3: 0x9bd657 Node::ResetStdio() [npm]
4:0x7fd18c8c7008 [/lib/x86_64-linux-gnu/libc.so.6]
5:0x7fd18c8c7055 [/lib/x86_64-linux-gnu/libc.so.6]
6:0x994907 [npm]
7:0xbc9a29 [npm]
8: 0xbcb817 v8::internal::Builtin_HandleApiCall(int, unsigned long*, v8::internal::Isolate*) [npm]
9:0x13a72b9 [npm]
有时我会看到一个简短的错误:
终止
npm 错误!代码生命周期
npm 错误!错误号 143
npm 错误! App@0.0.1 开始:`node app.js`
npm 错误!退出状态 143
npm 错误!
npm 错误! App@0.0.1 启动脚本失败。
npm 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。
npm 错误!可以在以下位置找到此运行的完整日志:
npm 错误!/home/bitnami/.npm/_logs/2020-12-17T21_06_43_530Z-debug.log
两者有什么区别,重启 NodeJS 服务器的最佳方法是什么?
最佳答案
不要杀死服务器(因为它可能会离开绑定(bind)
关闭服务器的最佳方法是实现一种正常关闭服务器的机制。
例如,您可以通过捕获 SIGINT (or any other signal exposed to a process) 来做到这一点。并处理服务器终止。
在 nodejs 中,你可以使用 process.on()
process.on("SIGINT", () => {
console.log("SIGINT received");
});
发送一个 SIGINT 来处理,做kill -s SIGINT <node process id>
您可能还对 this thread 感兴趣
关于node.js - NodeJS 终止错误的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65355026/