Кажется, что можно сделать что-то подобное, используя child_process
. Вы можете добавить его, запустив npm i child_process
, а затем импортировать его следующим образом: const cp = require('child_process');
.
Тогда код для перезапуска будет выглядеть примерно так:
await message.channel.send("Restarting")
const child = cp.spawn('node', ['<YourScriptFileNameHere>'], { detached: true })
child.unref()
process.exit()
Это создаст другой процесс это снова запустит ваш скрипт и отключит его от текущего процесса. Теперь, когда вы запускаете process.exit()
, текущий процесс завершается, но другой процесс будет запускать бота в фоновом режиме.
Если вы обычно запускаете что-то вроде node index.js
для запуска бота в консоли, вы не будете иметь возможность видеть любой вывод после выполнения первой команды перезапуска. Если вы посмотрите в диспетчере задач, вы можете найти процесс, запускающий бот, выполнив поиск Node.js: Server-side Javascript
. Если вы хотите остановить бота, вам придется завершить эту задачу вручную.
Я не заметил никаких утечек памяти, когда это делал сам, но это может быть проблемой, если вы часто запускаете команду перезапуска.