瀏覽代碼

fix: jobs/worker - pass through job error from worker process (#3822)

LK HO 4 年之前
父節點
當前提交
71aa0c9346
共有 4 個文件被更改,包括 22 次插入5 次删除
  1. 11 3
      server/core/scheduler.js
  2. 7 2
      server/core/worker.js
  3. 2 0
      server/jobs/rebuild-tree.js
  4. 2 0
      server/jobs/render-page.js

+ 11 - 3
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()
           })

+ 7 - 2
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)
+  }
 })()

+ 2 - 0
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
   }
 }

+ 2 - 0
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
   }
 }