【问题标题】:NodeJS Javascript: Restart ProcessNodeJS Javascript:重启过程
【发布时间】:2023-08-14 12:17:01
【问题描述】:

感谢您点击此问题。 我正在尝试重新启动 nodeJS 进程,而无需外部库。 我做了这段代码:

function restartProcess() {
spawn(process.argv[1], process.argv.slice(2), {
  detached: true, 
  stdio: ['ignore', out, err]
}).unref()
process.exit()
}
bot.on( "kicked", (reason) => {
    console.log("KICKED! "+ reason)
    restartProcess()
})

但是,当调用 restartProcess() 时,我得到错误:

C:\Users\Toshiba\Desktop\program\mineflayer\spbot\bot.js:7
      stdio: ['ignore', out, err]
                        ^

ReferenceError: out is not defined
    at restartProcess (C:\Users\Toshiba\Desktop\program\mineflayer\spbot\bot.js:7:25)
    at EventEmitter.<anonymous> (bot.js:54:5)
    at EventEmitter.emit (events.js:315:20)
    at Client.<anonymous> (C:\Users\Toshiba\node_modules\mineflayer\lib\plugins\kick.js:5:9)
    at Client.emit (events.js:315:20)
    at FullPacketParser.<anonymous> (C:\Users\Toshiba\node_modules\minecraft-protocol\src\client.js:89:12)
    at FullPacketParser.emit (events.js:315:20)
    at addChunk (C:\Users\Toshiba\node_modules\readable-stream\lib\_stream_readable.js:298:12)
    at readableAddChunk (C:\Users\Toshiba\node_modules\readable-stream\lib\_stream_readable.js:280:11)
    at FullPacketParser.Readable.push (C:\Users\Toshiba\node_modules\readable-stream\lib\_stream_readable.js:241:10)

任何帮助都会非常感激不尽!

【问题讨论】:

  • 好吧,至少在我们看到的代码中outerr 确实没有定义。你是说process.stdoutprocess.stderr 吗?我想是这样。但我不确定你在这里尝试做什么会奏效。我认为您应该将当前流程(从外部)包装在 npm forever 工具之类的东西中。
  • 我认为您不能让进程自行重启。您需要一个外部管理器来重新启动它,例如 nodemon (dev) 或 PM2 (prod/persistent)
  • 这在*.com/questions/40835187/node-js-process-restart 得到了回答,但一般来说,使用 monit、PM2 等是“正确”的方法。您可以拥有bot.on('kicked', () =&gt; process.exit(0)),然后进程管理器将为您重新启动。您可能还需要使用从0 开始的process.argv(Node 可执行文件)。

标签: javascript node.js restart application-restart


【解决方案1】:

改为:

function restartProcess() {
spawn(process.argv[1], process.argv.slice(2), {
  detached: true, 
  stdio: ['ignore', process.stdout, process.stderr]
}).unref()

【讨论】:

  • 报错(评论太长):(
  • 更新原始答案 - 我的建议 + 新错误。