【问题标题】:{node / discord js} Restarting bot's entire script on error{node / discord js} 出错时重启机器人的整个脚本
【发布时间】:2020-08-22 04:45:28
【问题描述】:

所以我试图让我的机器人在遇到错误时完全重新启动。我不让它筛选连接错误的原因是,每当我遇到互联网问题时,代码开始重复多次,因为原始节点进程尚未终止,技术上我可以修复,但其他连接到外部api 也停止工作。所以忽略修复单个问题,我只想完全重新启动。

我目前正在做的是使用节点child_process,这个功能:

spawn(process.argv.shift(), process.argv, {
    cwd: process.cwd(),
    detached : true,
    stdio: "inherit"
});
process.exit();

我知道 stdio 继承什么都不做,因为它退出了父进程,但它并没有真正改变任何东西来让它忽略所以我只是离开了它。基本上这在理论上是可行的,如果我使用命令来执行它,我可以一遍又一遍地执行它,它会正常工作,单一的不和谐客户端,没有重复,它已经启动,我只是无法监控它,因为我原来的终端已断开连接,我可以使用命令退出当前进程,因此它不会卡住,因为我没有 ctrl-c 的终端。但是一旦付诸实践,通过断开我的互联网来执行 bot.on("error") 中的功能似乎有效,它结束了第一个过程,但是在重新获得互联网后,没有连接客户端。

我的猜测是:bot.on("error") 不会在下一个过程中重新执行,因为没有创建不和谐的客户端。

所以我不知道我是否让这太复杂了,或者我是否需要添加更多内容。如果这是最好的方法,那么我需要解决的就是等到我有互联网回来,然后再做一个新的过程或类似的东西。我没有受过摆弄节点的教育,所以如果有任何答案对初学者友好(主要针对节点),我会非常感激。

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:
    bot.on("error", (err) => {
    process.exit(0)
    });
    

    应该可以,出错时会重启机器人。

    不确定你的意思

    我的猜测是:bot.on("error") 不会在下一个过程中重新执行,因为没有创建不和谐的客户端。

    只要您在与启动相同的代码中设置机器人,它就会重新启动机器人。

    【讨论】:

    • process.exit 会退出整个进程,不会重启
    • 仅当它是一次性实例时。
    【解决方案2】:

    如果您使用批处理文件来运行您的机器人,只需在 node . 和最后的 goto a 之前添加 :a

    【讨论】:

    • 我使用的是 .js 文件,而不是批处理文件。如果我可以在批处理文件和 js 文件之间进行通信,那可能会起作用,但我对此表示怀疑
    • 不,我的意思是你可以用我告诉你的额外代码将node index.js 放入批处理文件中。
    猜你喜欢
    • 2021-07-17
    • 2020-11-11
    • 1970-01-01
    • 2021-04-05
    • 2018-10-10
    • 2021-11-24
    • 2020-01-10
    • 2020-08-28
    • 2019-09-16
    相关资源
    最近更新 更多