diff --git a/server/core/scheduler.js b/server/core/scheduler.js index 34c4e1f6..7216427e 100644 --- a/server/core/scheduler.js +++ b/server/core/scheduler.js @@ -55,14 +55,22 @@ class Job { `--job=${this.name}`, `--data=${data}` ], { - cwd: WIKI.ROOTPATH + cwd: WIKI.ROOTPATH, + stdio: ['inherit', 'inherit', 'pipe', 'ipc'] }) + const stderr = []; + proc.stderr.on('data', chunk => stderr.push(chunk)) this.finished = new Promise((resolve, reject) => { proc.on('exit', (code, signal) => { + const data = Buffer.concat(stderr).toString() if (code === 0) { - resolve() + resolve(data) } else { - reject(signal) + const err = new Error(`Error when running job ${this.name}: ${data}`) + err.exitSignal = signal + err.exitCode = code + err.stderr = data + reject(err) } proc.kill() }) diff --git a/server/core/worker.js b/server/core/worker.js index bb983c07..d648a678 100644 --- a/server/core/worker.js +++ b/server/core/worker.js @@ -14,6 +14,11 @@ WIKI.logger = require('./logger').init('JOB') const args = require('yargs').argv ;(async () => { - await require(`../jobs/${args.job}`)(args.data) - process.exit(0) + try { + await require(`../jobs/${args.job}`)(args.data) + process.exit(0) + } catch (e) { + await new Promise(resolve => process.stderr.write(e.message, resolve)) + process.exit(1) + } })() diff --git a/server/jobs/rebuild-tree.js b/server/jobs/rebuild-tree.js index 53d3898a..c2fc3728 100644 --- a/server/jobs/rebuild-tree.js +++ b/server/jobs/rebuild-tree.js @@ -74,5 +74,7 @@ module.exports = async (pageId) => { } catch (err) { WIKI.logger.error(`Rebuilding page tree: [ FAILED ]`) WIKI.logger.error(err.message) + // exit process with error code + throw err } } diff --git a/server/jobs/render-page.js b/server/jobs/render-page.js index 8f4bc45a..3a88b375 100644 --- a/server/jobs/render-page.js +++ b/server/jobs/render-page.js @@ -90,5 +90,7 @@ module.exports = async (pageId) => { } catch (err) { WIKI.logger.error(`Rendering page ID ${pageId}: [ FAILED ]`) WIKI.logger.error(err.message) + // exit process with error code + throw err } }