|
@ -1,22 +1,25 @@
|
|
|
/**
|
|
|
服务守护脚本。当服务器进程失败时,重启IM服务器。
|
|
|
|
|
|
守护服务不是应用程序的入口,但作为服务的外壳,提供进程信号监听与进程重启,保证服务的连续性。
|
|
|
* 服务守护脚本。当服务器进程失败时,重启IM服务器。
|
|
|
*
|
|
|
* 守护服务不是应用程序的入口,但作为服务的外壳,提供进程信号监听与进程重启,保证服务的连续性。
|
|
|
*/
|
|
|
var cp = require('child_process');
|
|
|
var worker;
|
|
|
"use strict";
|
|
|
|
|
|
function spawn(spawnScript) {
|
|
|
// 进程守护,开启IPC通道,双向通信
|
|
|
worker = cp.spawn('node', [spawnScript], {
|
|
|
stdio: [0, 1, 2, 'ipc']
|
|
|
});
|
|
|
let cp = require('child_process');
|
|
|
let worker;
|
|
|
require('util');
|
|
|
|
|
|
function startWorker(spawnScript) {
|
|
|
// 进程守护,开启IPC通道双向通信
|
|
|
let exeFile = process.platform === "linux" ? "./node" : "node";
|
|
|
worker = cp.spawn(exeFile, [spawnScript], {stdio: [0, 1, 2, 'ipc']});
|
|
|
|
|
|
//监视子进程,当其崩溃时重启服务
|
|
|
worker.on('exit', function (code) {
|
|
|
if (code !== 0) {
|
|
|
console.log('IM server is down, restarting...');
|
|
|
spawn(spawnScript);
|
|
|
|
|
|
startWorker(spawnScript);
|
|
|
}
|
|
|
});
|
|
|
|
|
@ -26,7 +29,9 @@ function spawn(spawnScript) {
|
|
|
}
|
|
|
|
|
|
function main() {
|
|
|
spawn('./app.js');
|
|
|
console.log('Armour process id: ' + process.pid);
|
|
|
|
|
|
startWorker('./app.js');
|
|
|
|
|
|
// 守护进程本身退出时,关闭其启动的服务
|
|
|
process.on('SIGTERM', function () {
|
|
@ -35,4 +40,5 @@ function main() {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
main();
|
|
|
main();
|
|
|
|