123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 'use strict';
- const path = require('path');
- const util = require('util');
- const sleep = require('mz-modules/sleep');
- const Command = require('../command');
- const isWin = process.platform === 'win32';
- const osRelated = {
- titleTemplate: isWin ? '\\"title\\":\\"%s\\"' : '"title":"%s"',
- appWorkerPath: isWin ? 'egg-cluster\\lib\\app_worker.js' : 'egg-cluster/lib/app_worker.js',
- agentWorkerPath: isWin ? 'egg-cluster\\lib\\agent_worker.js' : 'egg-cluster/lib/agent_worker.js',
- };
- class StopCommand extends Command {
- constructor(rawArgv) {
- super(rawArgv);
- this.usage = 'Usage: egg-scripts stop [--title=example]';
- this.serverBin = path.join(__dirname, '../start-cluster');
- this.options = {
- title: {
- description: 'process title description, use for kill grep',
- type: 'string',
- },
- };
- }
- get description() {
- return 'Stop server';
- }
- * run(context) {
- const { argv } = context;
- this.logger.info(`stopping egg application ${argv.title ? `with --title=${argv.title}` : ''}`);
- // node /Users/tz/Workspaces/eggjs/egg-scripts/lib/start-cluster {"title":"egg-server","workers":4,"port":7001,"baseDir":"/Users/tz/Workspaces/eggjs/test/showcase","framework":"/Users/tz/Workspaces/eggjs/test/showcase/node_modules/egg"}
- let processList = yield this.helper.findNodeProcess(item => {
- const cmd = item.cmd;
- return argv.title ?
- cmd.includes('start-cluster') && cmd.includes(util.format(osRelated.titleTemplate, argv.title)) :
- cmd.includes('start-cluster');
- });
- let pids = processList.map(x => x.pid);
- if (pids.length) {
- this.logger.info('got master pid %j', pids);
- this.helper.kill(pids);
- // wait for 5s to confirm whether any worker process did not kill by master
- yield sleep(argv.timeout || '5s');
- } else {
- this.logger.warn('can\'t detect any running egg process');
- }
- // node --debug-port=5856 /Users/tz/Workspaces/eggjs/test/showcase/node_modules/_egg-cluster@1.8.0@egg-cluster/lib/agent_worker.js {"framework":"/Users/tz/Workspaces/eggjs/test/showcase/node_modules/egg","baseDir":"/Users/tz/Workspaces/eggjs/test/showcase","port":7001,"workers":2,"plugins":null,"https":false,"key":"","cert":"","title":"egg-server","clusterPort":52406}
- // node /Users/tz/Workspaces/eggjs/test/showcase/node_modules/_egg-cluster@1.8.0@egg-cluster/lib/app_worker.js {"framework":"/Users/tz/Workspaces/eggjs/test/showcase/node_modules/egg","baseDir":"/Users/tz/Workspaces/eggjs/test/showcase","port":7001,"workers":2,"plugins":null,"https":false,"key":"","cert":"","title":"egg-server","clusterPort":52406}
- processList = yield this.helper.findNodeProcess(item => {
- const cmd = item.cmd;
- return argv.title ?
- (cmd.includes(osRelated.appWorkerPath) || cmd.includes(osRelated.agentWorkerPath)) && cmd.includes(util.format(osRelated.titleTemplate, argv.title)) :
- (cmd.includes(osRelated.appWorkerPath) || cmd.includes(osRelated.agentWorkerPath));
- });
- pids = processList.map(x => x.pid);
- if (pids.length) {
- this.logger.info('got worker/agent pids %j that is not killed by master', pids);
- this.helper.kill(pids, 'SIGKILL');
- }
- this.logger.info('stopped');
- }
- }
- module.exports = StopCommand;
|