cluster fork and restart easy way.
- Easy fork with worker file path
- Handle worker restart, even it was exit unexpected.
- Auto error log process
uncaughtExceptionevent
npm install cforkimportutilfrom'node:util';import{cfork}from'cfork';constclusterWorker=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)=>{constexitCode=worker.process.exitCode;consterr=newError(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 stderrprocess.on('uncaughtException',err=>{// do what you want});// if you want to dynamically disable refork, you can call the setDisableRefork, priority over the refork parametercfork.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_istanbulenv 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.