123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 'use strict';
- /**
- * agent worker is child_process forked by master.
- *
- * agent worker only exit in two cases:
- * - receive signal SIGTERM, exit code 0 (exit gracefully)
- * - receive disconnect event, exit code 110 (maybe master exit in accident)
- */
- // $ node agent_worker.js options
- const options = JSON.parse(process.argv[2]);
- if (options.require) {
- // inject
- options.require.forEach(mod => {
- require(mod);
- });
- }
- const debug = require('debug')('egg-cluster');
- const gracefulExit = require('graceful-process');
- const ConsoleLogger = require('egg-logger').EggConsoleLogger;
- const consoleLogger = new ConsoleLogger({ level: process.env.EGG_AGENT_WORKER_LOGGER_LEVEL });
- const Agent = require(options.framework).Agent;
- debug('new Agent with options %j', options);
- let agent;
- try {
- agent = new Agent(options);
- } catch (err) {
- consoleLogger.error(err);
- throw err;
- }
- function startErrorHandler(err) {
- consoleLogger.error(err);
- consoleLogger.error('[agent_worker] start error, exiting with code:1');
- process.exitCode = 1;
- process.kill(process.pid);
- }
- agent.ready(err => {
- // don't send started message to master when start error
- if (err) return;
- agent.removeListener('error', startErrorHandler);
- process.send({ action: 'agent-start', to: 'master' });
- });
- // exit if agent start error
- agent.once('error', startErrorHandler);
- gracefulExit({
- logger: consoleLogger,
- label: 'agent_worker',
- beforeExit: () => agent.close(),
- });
|