UNPKG

http-alive

Version:
72 lines (71 loc) 2.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = require('path'); const child_process_1 = require("child_process"); const util_1 = require("./util"); run(); function run() { const conf = util_1.parseConf(); process.env.PORT = process.env.PORT || conf.master.toString(); if (!process.env.HTTP_ALIVE_LOCK) { const arbiter = child_process_1.spawn('node', [path.resolve(__dirname, 'server.js')], { detached: true, stdio: 'pipe', env: Object.assign({}, process.env, { PORT: conf.arbiter.toString(), MASTER_PORT: conf.master.toString(), SLAVE_PORT: conf.slave.toString(), HTTP_ALIVE_LOCK: 'true' }) }); arbiter.stderr.on('data', (data) => { if (data.toString().includes('EADDRINUSE')) { console.log('[arbiter]:previous ok, skip restart'); } else { console.log('[arbiter]:' + data); } }); arbiter.stdout.on('data', (data) => { console.log('[arbiter]:' + data); }); util_1.delay(5000, () => { // if master ok if (util_1.checkPid(process.pid)) { util_1.setPid('master', process.pid); const slavePid = util_1.getPid('slave'); // if old slave exist if (slavePid) { try { process.kill(slavePid); console.log(`kill pid ${slavePid} of slave`); } catch (e) { console.log(`skip pid ${slavePid} of slave`); } } util_1.delay(1000, () => { const slave = child_process_1.spawn('node', [module.parent.filename.replace('.ts', '.js')], { detached: true, stdio: 'pipe', env: Object.assign({}, process.env, { PORT: conf.slave.toString(), HTTP_ALIVE_LOCK: 'true' }) }); slave.stderr.on('data', (data) => { console.error('[slave]:' + data); }); slave.stdout.on('data', (data) => { console.log('[slave]:' + data); }); util_1.delay(3000, () => { if (util_1.checkPid(slave.pid)) { util_1.setPid('slave', slave.pid); } }); }); } }); util_1.delay(3000, () => { if (util_1.checkPid(arbiter.pid)) { util_1.setPid('arbiter', arbiter.pid); } if (util_1.checkPid(process.pid)) { util_1.setPid('master', process.pid); } }); process.env.HTTP_ALIVE_LOCK = 'true'; } }