pstarter

Start http worker process for nodejs

Usage no npm install needed!

<script type="module">
  import pstarter from 'https://cdn.skypack.dev/pstarter';
</script>

README

Usage example at http://sibox.isgoodness.com

var pstarter = require('pstarter');

pstarter.startMaster(__dirname + '/config/configs.js', {}, function() {
    var config = require('./config/configs.js');
    pstarter.statServer(config.http.statPort, config.http.statHost);
    if (process.env['NODE_ENV'] && process.env['NODE_ENV'] == 'development') {
        pstarter.startWatch(__dirname, [__dirname +'/node_modules'], ['.js', '.json', '.html', '.css']);
    }
}).startWorker(function() {
    var config = require('./config/configs.js');

    var express = require('express');
    var bootstrap = require('./app/bootstrap.js');
    var app = express.createServer();

    bootstrap.setupApp(app, __dirname);
    bootstrap.bootstrap(app);
    bootstrap.postrun();
    app.listen(config.http.port, config.http.ip);
});

Or run separate worker file

master.js

var pstarter = require('pstarter');

pstarter.startMaster({}, {exec: './worker.js'});

worker.js

var pstarter = require('pstarter');
pstarter.startWorker(function() {
    console.log('Hello world!');
});

Methods

startMaster(confFile, masterSettings, callback)

startWorker(callback, cleanupCallback)

  • callback - will call when worker has attached listener on exit signal
  • cleanupCallback - will call when worker receives exit signal. It pass a function for terminating process (or you can choose to exit).

startWatch(root, skipFolders, exts)

  • root top folder to watch, all subfolder will also be watched
  • skipFolders Array of folders you want to skip, absolute path
  • exts Array of extension to listen on changes, including "."

statServer(port, host)

  • port port to run stat server
  • host host to run stat server

Start with init script on Ubuntu

You need to create a symbolic link /etc/init.d/pstarter to pstarter/etc/init.d/pstarter and make pstarter executable. You need also specify NODE_BIN, SERVER, PID_FILE, AS_USER, NODEJS and NODE_ENV if your application uses it:

  • NODE_BIN folder which contains SERVER
  • SERVER application/server file to execute
  • PID_FILE should be /var/run/pstarter.pid in production linux
  • AS_USER the username or uid that you want to run your app (worker) with
  • NODEJS executable nodejs
  • NODE_ENV for your own application; normally development/production

Start workers

sudo /etc/init.d/pstarter start

Old workers will exit directly and new workers created

sudo /etc/init.d/pstarter restart

Old workers will exit graceful one at the time and replaced with a new one

sudo /etc/init.d/pstarter graceful

Run stop (bellow) and start command will be executed

sudo /etc/init.d/pstarter force-restart

Old workers exit directly; parent exits

sudo /etc/init.d/pstarter stop

Register init script for startup at reboot in Ubuntu

cd /etc/init.d/
sudo update-rc.d pstarter defaults