JacksonTian / nounou

Node.js process deamon.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

nounou(保姆)

Node.js process deamon.

非 Cluster 模式的进程守护

cluster 的 fork 形式仅能对单一进程使用。nounou 适合其他情况,比如守护定时任务。

注意:nounou 仅负责重启,不负责调度,不负责负载均衡。

Usage

编程式使用:

const nounou = require('nounou');
const timerPath = '/path/to/timer.js';

// 任务进程
nounou(timerPath).on('fork', (worker) => {
  console.log('[%s] [%d] new task worker start', Date(), worker.pid);
}).on('disconnect', (worker) => {
  console.error('[%s] [%s] task worker: %s disconnect.',
    Date(), process.pid, worker.pid);
}).on('unexpectedExit', (worker, code, signal) => {
  var err = new Error(util.format('task worker %s died (code: %s, signal: %s)',
    worker.pid, code, signal));
  err.name = 'WorkerDiedError';
  console.error('[%s] [%s] worker exit: %s', Date(), process.pid, err.stack);
}).on('reachReforkLimit', () => {
  console.error('Too much refork!!!!!!');
});

命令式使用:

$ nounou /path/to/timer.js
# multi workers
$ nounou /path/to/timer.js 2

正常退出

如果子进程在运行一段时间后需要退出,之后无需重启。需要通过如下方式进行退出:

process.send({type: 'suicide'});
process.exit(0);

该行为会触发 expectedExit 事件,标志退出符合预期,无需重启。

Events

  • exit。退出事件。
  • expectedExit。预期的退出事件。
  • unexpectedExit。非预期的退出事件。
  • disconnect。IPC通道断开的事件。
  • reachReforkLimit。单位时间内重启次数达到上限。该事件后,进程不会再次重启。

注意事项

通常 kill 掉 nounou 主进程,它守护的子进程并不会随之而退出。如需子进程跟随父进程退出,需要以下代码:

// exiting with parent process
process.on('disconnect', () => {
  console.log('exiting with parent process');
  process.exit(0);
});

License

The MIT license

About

Node.js process deamon.

License:MIT License


Languages

Language:JavaScript 100.0%