Skip to content
Snippets Groups Projects
Select Git revision
  • 5a201bbca76a445d43ce0a8e7b8c56a04819fd90
  • dev default protected
  • release/1.9.1 protected
  • pini-1.8-docker
  • pini-sync-onlypeers
  • duniter-v2s-issue-123-industrialize-releases
  • feature/build-aarch64-nodejs16
  • release/1.8 protected
  • pini-docker
  • ci_tags
  • fix/1448/1.8/txs_not_stored
  • feature/node-20
  • fix/1441/node_summary_with_storage
  • fix/1442/improve_bma_tx_history
  • feature/wotwizard-1.8
  • release/1.9 protected
  • 1.7 protected
  • feature/docker-set-latest protected
  • feature/fast-docker-build-1.8.4
  • fast-docker-build protected
  • feature/dump-distance
  • v1.8.7 protected
  • v1.8.7-rc4 protected
  • v1.8.7-rc3 protected
  • v1.8.7-rc2 protected
  • v1.8.7-rc1 protected
  • v1.8.6 protected
  • v1.7.23 protected
  • v1.8.5 protected
  • v1.8.4 protected
  • v1.8.3 protected
  • v1.8.2 protected
  • v1.8.1 protected
  • v1.8.0 protected
  • v1.8.0-rc1 protected
  • v1.8.0-beta5 protected
  • v1.8.0-beta4 protected
  • v1.8.0-beta3 protected
  • v1.8.0-beta2 protected
  • v1.8.0-beta protected
  • v1.7.21 protected
41 results

daemon

Blame
  • 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();
        }
      });
    }