我需要创建一个node.js代码,它启动bitcoind
守护进程命令并继续监视它,如果崩溃,进程应该重新启动。
我知道有命令行npm模块,如forever
,forver-monitor
,pm2
,但我需要知道如何在代码中使用它们,而不是全局安装在系统上。
原因是我要在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
启动时它不会将流程保持在前台,并将其推送到后台?从永远模块的监视器,它显示退出的过程?我不确定。
请帮忙吗?
提前致谢。
答案 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()
});