http-alive
Version:
keep your web service always online
72 lines (71 loc) • 2.99 kB
JavaScript
;
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';
}
}