68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
// Generated, do not edit. sha256:9c19f153125a535056932eee985b7b6abf166ab4af48fe08f3cd2fb0dbf6edfd
|
|
import { spawn } from 'node:child_process';
|
|
import { dirname, join, resolve } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
import { CONFIG } from '../shared/config.js';
|
|
|
|
const HIER = dirname(fileURLToPath(import.meta.url));
|
|
const SERVER = join(HIER, 'index.mjs');
|
|
|
|
const STOPSIGNALEN = ['SIGINT', 'SIGTERM', 'SIGHUP'];
|
|
|
|
let kind = null;
|
|
let stoppen = false;
|
|
let eersteStart = true;
|
|
|
|
function startServer() {
|
|
const env = { ...process.env, ASSETAPP_SUPERVISED: '1' };
|
|
if (!eersteStart) delete env.ASSETAPP_OPEN;
|
|
eersteStart = false;
|
|
|
|
kind = spawn(process.execPath, [SERVER], {
|
|
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
|
|
env,
|
|
});
|
|
|
|
kind.on('exit', (code, signal) => {
|
|
kind = null;
|
|
if (stoppen) return;
|
|
if (code === CONFIG.PORTFOLIO.RESTART_EXIT_CODE) {
|
|
console.log('[supervisor] portefeuille gewisseld; de server start opnieuw.');
|
|
startServer();
|
|
return;
|
|
}
|
|
if (signal) {
|
|
console.log(`[supervisor] de server stopte op signaal ${signal}.`);
|
|
process.exit(1);
|
|
}
|
|
process.exit(code ?? 0);
|
|
});
|
|
|
|
kind.on('error', (e) => {
|
|
console.error(`[supervisor] kan de server niet starten: ${e.message}`);
|
|
process.exit(1);
|
|
});
|
|
}
|
|
|
|
for (const signaal of STOPSIGNALEN) {
|
|
process.on(signaal, () => {
|
|
stoppen = true;
|
|
if (!kind) process.exit(0);
|
|
kind.kill(signaal);
|
|
const hard = setTimeout(() => { if (kind) kind.kill('SIGKILL'); }, 10_000);
|
|
hard.unref();
|
|
});
|
|
}
|
|
|
|
process.on('exit', () => { if (kind) kind.kill('SIGKILL'); });
|
|
process.on('uncaughtException', (e) => {
|
|
console.error(`[supervisor] onverwachte fout: ${e.message}`);
|
|
if (kind) kind.kill('SIGKILL');
|
|
process.exit(1);
|
|
});
|
|
|
|
if (resolve(process.argv[1] ?? '') === resolve(fileURLToPath(import.meta.url))) startServer();
|
|
|
|
export { STOPSIGNALEN, SERVER };
|