app.armour.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * 服务守护脚本。当服务器进程失败时,重启IM服务器。
  3. *
  4. * 守护服务不是应用程序的入口,但作为服务的外壳,提供进程信号监听与进程重启,保证服务的连续性。
  5. */
  6. "use strict";
  7. let cp = require('child_process');
  8. let worker;
  9. require('util');
  10. function startWorker(spawnScript) {
  11. // 进程守护,开启IPC通道双向通信
  12. let exeFile = process.platform === "linux" ? "./node" : "node";
  13. worker = cp.spawn(exeFile, [spawnScript], {stdio: [0, 1, 2, 'ipc']});
  14. //监视子进程,当其崩溃时重启服务
  15. worker.on('exit', function (code) {
  16. if (code !== 0) {
  17. console.log('IM server is down, restarting...');
  18. startWorker(spawnScript);
  19. }
  20. });
  21. worker.on('message', function (msg) {
  22. console.log(msg);
  23. });
  24. }
  25. function main() {
  26. console.log('Armour process id: ' + process.pid);
  27. startWorker('./app.js');
  28. // 守护进程本身退出时,关闭其启动的服务
  29. process.on('SIGTERM', function () {
  30. worker.kill();
  31. process.exit(0);
  32. });
  33. }
  34. main();