Browse Source

修复linux环境中使用app.armour.js导致重启失败:原因是使用了环境中的node,而不是自带的node

Sand 8 years ago
parent
commit
6be187ea42
2 changed files with 19 additions and 28 deletions
  1. 0 15
      im/.idea/im.iml
  2. 19 13
      src/doctor/app.armour.js

+ 0 - 15
im/.idea/im.iml

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
  <component name="NewModuleRootManager">
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
      <excludeFolder url="file://$MODULE_DIR$/src/doctor/node_modules" />
      <excludeFolder url="file://$MODULE_DIR$/temp" />
      <excludeFolder url="file://$MODULE_DIR$/tmp" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="im.doctor" level="project" />
  </component>
</module>

+ 19 - 13
src/doctor/app.armour.js

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