Select Git revision
-
Cédric Moreau authoredCédric Moreau authored
daemon 2.86 KiB
#!/usr/bin/env node
"use strict";
const directory = require('../app/lib/system/directory');
const path = require('path');
const spawn = require('child_process').spawn;
var daemon = getDaemon('start');
switch (process.argv[2]) {
case "start":
start(daemon);
break;
case "stop":
daemon.stop();
break;
case "sync":
case "reset":
const command = process.argv[2];
if (daemon.status()) {
console.log('Stopping daemon...');
daemon.stop(function() {
launchCmd(command);
});
} else {
launchCmd(command);
}
break;
case "restart":
daemon = getDaemon('start');
daemon.stop(function(err) {
err && console.error(err);
start(daemon);
});
break;
case "webstart":
daemon = getDaemon('webstart');
start(daemon);
break;
case "webrestart":
daemon = getDaemon('webstart');
daemon.stop(function(err) {
err && console.error(err);
start(daemon);
});
break;
case "logs":
console.log(directory.INSTANCE_HOMELOG_FILE);
process.exit(0);
break;
default:
console.log("Usage: [start|stop|restart|webstart|webrestart]");
}
function getDaemon(overrideCommand) {
return require("daemonize2").setup({
main: "duniter",
name: directory.INSTANCE_NAME,
pidfile: path.join(directory.INSTANCE_HOME, "app.pid"),
// We must redefine the main argument to 'start' because Duniter will receive it as command argument and does not
// know about 'restart' command.
argv: getCommand(overrideCommand)
});
}
function getCommand(overrideCommand) {
return process.argv.slice(2).map((arg, index) => index == 0 && overrideCommand ? overrideCommand : arg);
}
function getFullCommand(overrideCommand) {
let duniter = path.resolve(path.dirname(process.argv[1]), './duniter');
return [duniter].concat(getCommand(overrideCommand));
}
function launchCmd(cmd) {
let checkConf = spawn(process.argv[0], getFullCommand(cmd));
// Error messages
checkConf.stdout.on('data', (data) => console.log(data.toString('utf8')));
checkConf.stderr.on('data', (data) => console.error(data.toString('utf8')));
}
function start(daemonToStart) {
let checkConf = spawn(process.argv[0], getFullCommand('check-config'));
let echos = [];
// Error messages
checkConf.stdout.on('data', (data) => echos.push(data));
// checkConf.stderr.on('data', (data) => console.error(data.toString('utf8')));
// Result
checkConf.on('close', (code) => {
if (code !== 0 && code !== '0' && code !== '' && code !== null && code !== undefined) {
console.log('Error code \'%s\'', code);
echos.forEach((echo) => console.log(echo.toString('utf8').replace(/\n$/, '')));
console.log('You have configuration issues. Please fix them and retry to start your node with `duniter restart` or `duniter webrestart`.');
} else {
daemonToStart.start();
}
});
}