cluster fork and restart easy way.
- Easy fork with worker file path
- Handle worker restart, even it was exit unexpected.
- Auto error log process
uncaughtException
event
npm install cfork
import util from 'node:util';
import { cfork } from 'cfork';
const clusterWorker = cfork({
exec: '/your/app/worker.js',
// slaves: ['/your/app/slave.js'],
// count: require('os').cpus().length,
}).on('fork', worker => {
console.warn('[%s] [worker:%d] new worker start', Date(), worker.process.pid);
})
.on('disconnect', worker => {
console.warn('[%s] [master:%s] wroker:%s disconnect, exitedAfterDisconnect: %s, state: %s.',
Date(), process.pid, worker.process.pid, worker.exitedAfterDisconnect, worker.state);
})
.on('exit', (worker, code, signal) => {
const exitCode = worker.process.exitCode;
const err = new Error(util.format('worker %s died (code: %s, signal: %s, exitedAfterDisconnect: %s, state: %s)',
worker.process.pid, exitCode, signal, worker.exitedAfterDisconnect, worker.state));
err.name = 'WorkerDiedError';
console.error('[%s] [master:%s] wroker exit: %s', Date(), process.pid, err.stack);
})
// if you do not listen to this event
// cfork will output this message to stderr
.on('unexpectedExit', (worker, code, signal) => {
// logger what you want
})
// emit when reach refork times limit
.on('reachReforkLimit', () => {
// do what you want
});
// if you do not listen to this event
// cfork will listen it and output the error message to stderr
process.on('uncaughtException', err => {
// do what you want
});
// if you want to dynamically disable refork, you can call the setDisableRefork, priority over the refork parameter
cfork.setDisableRefork(clusterWorker, true);
const { cfork } = require('cfork');
- exec : exec file path
- slaves : slave process config
- args : exec arguments
- count : fork worker nums, default is
os.cpus().length
- refork : refork when worker disconnect or unexpected exit, default is
true
- limit: limit refork times within the
duration
, default is60
- duration: default is
60000
, one minute (so, therefork times
<limit / duration
) - autoCoverage: auto fork with istanbul when
running_under_istanbul
env set, default isfalse
- env: attach some environment variable key-value pairs to the worker / slave process, default to an empty object.
- windowsHide: Hide the forked processes console window that would normally be created on Windows systems, default to false.
- serialization: Specify the kind of serialization used for sending messages between processes. Possible values are 'json' and 'advanced'. See Advanced serialization for child_process for more details. Default: false.
Made with contributors-img.