Бот не перезагружается после завершения процесса - PullRequest
0 голосов
/ 09 июля 2020

У меня есть эти три строки кода для моей команды перезапуска. Однако, когда я запускаю команду, бот отключается и больше не возвращается. Я не совсем уверен, почему бот не перезагружается сам по себе; или это возможно с помощью этого кода?

Nodemon: v^2.0.4 Discord. JS: v12.2.0

const { token } = require("./config.json");
// Other Codes

  if (message.author.id !== '422103069808132106') return;
  await message.channel.send("Restarting")
  process.exit().then(() => client.login(token))

1 Ответ

0 голосов
/ 09 июля 2020

Кажется, что можно сделать что-то подобное, используя 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. Если вы хотите остановить бота, вам придется завершить эту задачу вручную.

Я не заметил никаких утечек памяти, когда это делал сам, но это может быть проблемой, если вы часто запускаете команду перезапуска.

...