|  | @ -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();
 | 
	
		
			
				|  |  | 
 |