使用node.js代码崩溃时重新启动bitcoind守护程序

时间:2016-12-29 05:07:00

标签: javascript node.js bitcoin

我需要创建一个node.js代码,它启动bitcoind守护进程命令并继续监视它,如果崩溃,进程应该重新启动。

我知道有命令行npm模块,如foreverforver-monitorpm2,但我需要知道如何在代码中使用它们,而不是全局安装在系统上。

原因是我要在Electron App中提供此代码,最终用户不会在他们的计算机上安装任何node.js或npm。

我使用了这段代码并且它给出了错误:

代码:

var forever = require('forever-monitor');
  var child = forever.start(['./bitcoind'], {
    max : 1,
    silent : true
  });

  child.on('exit', function () {
    console.log('bitcoind has exited');
  });

  child.start();

错误:

CONSOLE$ ps aux | grep bitcoind
satinder         32579   0.0  0.0  2432804    808 s001  S+    5:54pm   0:00.00 grep bitcoind
CONSOLE$ node test.js 
/Users/satinder/example/node_modules/eventemitter2/lib/eventemitter2.js:290
          throw arguments[1]; // Unhandled 'error' event
          ^

Error: Cannot start process that is already running.
    at /Users/satinder/example/node_modules/forever-monitor/lib/forever-monitor/monitor.js:158:26
    at doNTCallback0 (node.js:428:9)
    at process._tickCallback (node.js:357:13)
    at Function.Module.runMain (module.js:459:11)
    at startup (node.js:136:18)
    at node.js:972:3
CONSOLE$ ps aux | grep bitcoind
satinder         31931   0.1  0.3  2516556  23964 s000  SN    4:58pm   0:01.25 ./bitcoind
satinder         31939   0.0  0.0  2450212    832 s000  S+    4:58pm   0:00.00 grep bitcoind
CONSOLE$ 

我认为原因是bitcoind启动时它不会将流程保持在前台,并将其推送到后台?从永远模块的监视器,它显示退出的过程?我不确定。

请帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

似乎您在此过程终止之前调用child.start();

来自forever-monitor文档how to spawning-a-non-node-process

你应该尝试:

const forever = require('forever-monitor');
const child = forever.start(['./bitcoind'], {
  max : 1,
  silent : true
});

child.on('exit', function () {
  console.log('bitcoind has exited');
  child.start()
});