退出并重新启动整个脚本的简单方法?

时间:2019-04-29 10:00:35

标签: javascript node.js

我有一个Discord机器人,正在为其编写重启功能。我希望能够运行一个命令,该命令不仅可以停止脚本,而且可以杀死并重新启动它,因此我可以快速实现更新。我已经意识到Discord API不足以实现此目的,因此我没有将其添加到标签中。我能想到的最简单的方法是使用两个相互调用的脚本。

我发现的每个资源都引用了称为PM2的模块(?)或称为VBScript的编程语言。我不想弄乱每次保存时都会自动重新启动的模块,尤其是我不想尝试学习一种新语言。

这是我的伪代码,显示我的目标:

[bot.js]
function reboot() {
    runFile(`./reboot.js`)
}

[reboot.js]
kill (`./bot.js`)
runFile(`./bot.js`)

我希望的结果是让bot.js运行reboot.js。然后Reboot.js将退出bot.js并再次运行。然后reboot.js将关闭。我不在乎bot.js上已经在运行任何进程。

当然,如果有更简单的方法可以做到这一点,请告诉我。我需要尽可能的简单。

3 个答案:

答案 0 :(得分:1)

PM2是一位流程经理,将为您解决问题。

易于安装:npm install pm2 -g

启动您的机器人:pm2 start bot.js --name "Discord Bot"

从代码角度来说,您只需要kill the process。 PM2,作为流程管理器,将为您重新启动。

答案 1 :(得分:1)

我知道了。我使用了内置在node.js中的子进程模块。

[bot.js]

var cp = require('child_process');
function reboot() {
    var ls = cp.spawn('node', ['reboot.js']);
    client.destroy()
}


[full contents of reboot.js]

var cp = require('child_process');
var ls = cp.spawn('node', ['bot.js']);

(将所有这些信息发布给其他菜鸟使用)

编辑:请注意,重新启动后,控制台输出不再起作用,因为它是从reboot.js运行的,而不是直接从终端运行的。

答案 2 :(得分:0)

我不熟悉Discord机器人,但是如果您想以编程方式在NodeJS中启动,杀死和重新启动进程,则需要研究child_process模块。

https://nodejs.org/api/child_process.html#child_process_child_process