From 4c78660c4c53d6ffa0e758a25d8aefb7b667ceed Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Thu, 24 Apr 2025 06:09:21 +0000 Subject: [PATCH] Refactor service spawn and shutdown mechanism --- packages/server/gateway/services/service.js | 18 ++++++--------- packages/server/gateway/utils/spawnService.js | 22 +++++++++++++------ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/server/gateway/services/service.js b/packages/server/gateway/services/service.js index a4666db2..ee2e9a17 100755 --- a/packages/server/gateway/services/service.js +++ b/packages/server/gateway/services/service.js @@ -55,7 +55,8 @@ export default class Service { this.instance = await spawnService({ id: this.id, - service: this.path, + service: this, + path: this.path, cwd: this.cwd, onClose: this.handleClose.bind(this), onError: this.handleError.bind(this), @@ -140,8 +141,7 @@ export default class Service { // Kill the current process if is running if (this.instance.exitCode === null) { - console.log(`[${this.id}] Killing current process...`) - await this.instance.kill("SIGKILL") + await this.instance.kill() } // Start a new process @@ -153,17 +153,13 @@ export default class Service { /** * Stop the service */ - async stop() { + stop() { console.log(`[${this.id}] Stopping service...`) - if (this.fileWatcher) { - await this.fileWatcher.close() - this.fileWatcher = null - } + this.instance.kill() - if (this.instance) { - await this.instance.kill("SIGKILL") - this.instance = null + if (this.fileWatcher) { + this.fileWatcher.close() } } diff --git a/packages/server/gateway/utils/spawnService.js b/packages/server/gateway/utils/spawnService.js index ea1268b2..70212704 100755 --- a/packages/server/gateway/utils/spawnService.js +++ b/packages/server/gateway/utils/spawnService.js @@ -3,21 +3,29 @@ import createServiceLogTransformer from "./createServiceLogTransformer" import Vars from "../vars" -export default async ({ id, service, cwd, onClose, onError, onIPCData }) => { +export default async ({ + id, + service, + path, + cwd, + onClose, + onError, + onIPCData, +}) => { const instanceEnv = { ...process.env, - lb_service: { - id: service.id, - index: service.index, - }, + lb_service_id: service.id, + lb_service_path: service.path, + lb_service_version: service.version, + lb_service_cwd: service.cwd, + lb_service: true, } - let instance = ChildProcess.fork(Vars.bootloaderBin, [service], { + let instance = ChildProcess.fork(Vars.bootloaderBin, [path], { detached: false, silent: true, cwd: cwd, env: instanceEnv, - killSignal: "SIGTERM", }) instance.logs = {