From f996eb363be3d7bc0b439b24194f29773805fbea Mon Sep 17 00:00:00 2001 From: benji7425 Date: Tue, 23 Jan 2018 00:30:10 +0000 Subject: [PATCH] Add daily auto restart --- discord-bot-core/internal-config.json | 2 ++ discord-bot-core/monitor.js | 33 +++++++++++++++++++++++++++ package-lock.json | 7 +++++- package.json | 3 ++- 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 discord-bot-core/monitor.js diff --git a/discord-bot-core/internal-config.json b/discord-bot-core/internal-config.json index 88fc5ec..5d25d53 100644 --- a/discord-bot-core/internal-config.json +++ b/discord-bot-core/internal-config.json @@ -1,5 +1,7 @@ { "dbCompactionSchedule": "0 0 0,3,6,9 * * *", + "restartSchedule": "0 0 0 * * *", + "restartTimeout": 5000, "website": "https://benji7425.github.io", "discordInvite": "https://discord.gg/SSkbwSJ", "debugIgnores": [ diff --git a/discord-bot-core/monitor.js b/discord-bot-core/monitor.js new file mode 100644 index 0000000..a761777 --- /dev/null +++ b/discord-bot-core/monitor.js @@ -0,0 +1,33 @@ +const { fork } = require("child_process"); +const CronJob = require("cron").CronJob; +const DiscordUtil = require("./Util.js"); +// @ts-ignore +const InternalConfig = require("./internal-config.json"); + +let instance; + +restart(); + +new CronJob(InternalConfig.restartSchedule, restart, null, true); + +function restart() { + ensureKilledInstance() + .then(bootstrapNewInstance) + .catch(DiscordUtil.dateError); +} + +function bootstrapNewInstance() { + instance = fork(process.argv[2]); +} + +function ensureKilledInstance() { + return new Promise((resolve, reject) => { + if (instance) { + instance.kill(); + DiscordUtil.dateLog(`Killed existing instance for scheduled restart in ${InternalConfig.restartTimeout / 1000} sec`); + setTimeout(resolve, InternalConfig.restartTimeout); + } + else + resolve(); + }); +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 52037b2..747d877 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,14 @@ { "name": "discord-bot-rss-feed", - "version": "3.2.2", + "version": "3.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/node": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.3.0.tgz", + "integrity": "sha512-wNBfvNjzsJl4tswIZKXCFQY0lss9nKUyJnG6T94X/eqjRgI2jHZ4evdjhQYBSan/vGtF6XVXPApOmNH2rf0KKw==" + }, "acorn": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", diff --git a/package.json b/package.json index 56ae440..40acc1c 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,10 @@ "main": "app/index.js", "scripts": { "postinstall": "cd ./discord-bot-core && npm install", - "start": "node app/index.js --name=rss-feed" + "start": "node discord-bot-core/monitor.js ./app/index.js --name=rss-feed" }, "dependencies": { + "@types/node": "9.3.0", "camo": "git+https://github.com/scottwrobinson/camo.git", "discord.js": "11.2.0", "get-urls": "7.0.0",