javascriptnode.jssigkill

Restart a node.js app from code level


I've an app which initially creates static config files (once) and after files were written I need to reinitialize/restart the application. Is there something to restart a node.js app from itself?

This is required cause I've an application running in two runlevels in node.js. The initial one starts completly synchronus and after this level has been completed app is in async runlevel in a previously started environment.

I know there are tools like nodemon but that's not what I need in my case.

I tried to kill the app via process.kill() which is working but I can't listen to the kill event:

 // Add the listener
 process.on('exit', function(code) {
    console.log('About to exit with code:', code);
    // Start app again but how?
 });

 // Kill application
 process.kill();

Or is there a better, cleaner way to handle this?


Solution

  • Found a working case to get node.js restarted from app itself:

    Example:

    // Optional part (if there's an running webserver which blocks a port required for next startup
    try {
      APP.webserver.close(); // Express.js instance
      APP.logger("Webserver was halted", 'success');
    } catch (e) {
      APP.logger("Cant't stop webserver:", 'error'); // No server started
      APP.logger(e, 'error');
    }
    
    
    // First I create an exec command which is executed before current process is killed
    var cmd = "node " + APP.config.settings.ROOT_DIR + 'app.js';
    
    // Then I look if there's already something ele killing the process  
    if (APP.killed === undefined) {
      APP.killed = true;
    
      // Then I excute the command and kill the app if starting was successful
      var exec = require('child_process').exec;
      exec(cmd, function () {
        APP.logger('APPLICATION RESTARTED', 'success');
        process.kill();
      });
    }
    

    The only con I can see here is to loose outputs on console but if anything is logged into logfiles it's not a problem.