From 17eea80c2d63d13ee4b9d002ae24895fc41b65c2 Mon Sep 17 00:00:00 2001 From: shudingbo Date: Mon, 4 Nov 2019 12:40:37 +0800 Subject: [PATCH 1/3] add reload script --- lib/cmd/reload.js | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 lib/cmd/reload.js diff --git a/lib/cmd/reload.js b/lib/cmd/reload.js new file mode 100644 index 0000000..6d474f9 --- /dev/null +++ b/lib/cmd/reload.js @@ -0,0 +1,101 @@ +'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 ReloadCommand extends Command { + + constructor(rawArgv) { + super(rawArgv); + this.usage = 'Usage: egg-scripts reload [--title=example] [--type=agent|app]'; + this.serverBin = path.join(__dirname, '../start-cluster'); + this.options = { + title: { + description: 'process title description, use for kill grep', + type: 'string', + }, + type:{ + description: `process egg app type, use reload['agent'||'app']`, + type: 'string', + }, + }; + } + + get description() { + return 'Reload egg-worker 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('2s'); + } 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} + if(argv.type === 'agent'){ + processList = yield this.helper.findNodeProcess(item => { + const cmd = item.cmd; + return argv.title ? + ( cmd.includes(osRelated.agentWorkerPath)) && cmd.includes(util.format(osRelated.titleTemplate, argv.title)) : + ( cmd.includes(osRelated.agentWorkerPath)); + }); + } else if(argv.type === 'app'){ + processList = yield this.helper.findNodeProcess(item => { + const cmd = item.cmd; + return argv.title ? + (cmd.includes(osRelated.appWorkerPath)) && cmd.includes(util.format(osRelated.titleTemplate, argv.title)) : + (cmd.includes(osRelated.appWorkerPath)); + }); + } else { + 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); + + for( let i =0; i Date: Mon, 4 Nov 2019 12:56:26 +0800 Subject: [PATCH 2/3] chang name --- README.md | 6 ++++-- bin/{egg-scripts.js => egg-scriptsx.js} | 0 index.js | 1 + package.json | 4 ++-- 4 files changed, 7 insertions(+), 4 deletions(-) rename bin/{egg-scripts.js => egg-scriptsx.js} (100%) mode change 100755 => 100644 diff --git a/README.md b/README.md index 6bba9c9..1923add 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ deploy tool for egg project. ## Install ```bash -$ npm i egg-scripts --save +$ npm i egg-scriptsx --save ``` ## Usage @@ -18,7 +18,8 @@ Add `eggctl` to `package.json` scripts: { "scripts": { "start": "eggctl start --daemon", - "stop": "eggctl stop" + "stop": "eggctl stop", + "reload": "eggctl reload --type=all" } } ``` @@ -27,6 +28,7 @@ Then run as: - `npm start` - `npm stop` +- `npm run reload` **Note:** `egg-scripts` is not recommended to install global, you should install and use it as npm scripts. diff --git a/bin/egg-scripts.js b/bin/egg-scriptsx.js old mode 100755 new mode 100644 similarity index 100% rename from bin/egg-scripts.js rename to bin/egg-scriptsx.js diff --git a/index.js b/index.js index 5fd74e0..ee35535 100644 --- a/index.js +++ b/index.js @@ -17,3 +17,4 @@ module.exports = exports = EggScripts; exports.Command = Command; exports.StartCommand = require('./lib/cmd/start'); exports.StopCommand = require('./lib/cmd/stop'); +exports.ReloadCommand = require('./lib/cmd/reload'); diff --git a/package.json b/package.json index ebc1499..c8e736d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "egg-scripts", - "version": "2.11.1", + "name": "egg-scriptsx", + "version": "2.11.2", "description": "deploy tool for egg project", "main": "index.js", "bin": { From 7a4e480fe8c7d2b6620e779701992f503f02a989 Mon Sep 17 00:00:00 2001 From: shudingbo Date: Mon, 4 Nov 2019 13:00:43 +0800 Subject: [PATCH 3/3] update --- README.md | 2 +- index.js | 2 +- lib/cmd/reload.js | 4 ++-- lib/cmd/start.js | 2 +- lib/cmd/stop.js | 4 ++-- lib/command.js | 2 +- package.json | 6 +++--- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 1923add..067b120 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Then run as: - `npm stop` - `npm run reload` -**Note:** `egg-scripts` is not recommended to install global, you should install and use it as npm scripts. +**Note:** `egg-scriptsx` is not recommended to install global, you should install and use it as npm scripts. ## Command diff --git a/index.js b/index.js index ee35535..c9091e4 100644 --- a/index.js +++ b/index.js @@ -6,7 +6,7 @@ const Command = require('./lib/command'); class EggScripts extends Command { constructor(rawArgv) { super(rawArgv); - this.usage = 'Usage: egg-scripts [command] [options]'; + this.usage = 'Usage: egg-scriptsx [command] [options]'; // load directory this.load(path.join(__dirname, 'lib/cmd')); diff --git a/lib/cmd/reload.js b/lib/cmd/reload.js index 6d474f9..ea33318 100644 --- a/lib/cmd/reload.js +++ b/lib/cmd/reload.js @@ -15,7 +15,7 @@ class ReloadCommand extends Command { constructor(rawArgv) { super(rawArgv); - this.usage = 'Usage: egg-scripts reload [--title=example] [--type=agent|app]'; + this.usage = 'Usage: egg-scriptsx reload [--title=example] [--type=agent|app]'; this.serverBin = path.join(__dirname, '../start-cluster'); this.options = { title: { @@ -38,7 +38,7 @@ class ReloadCommand extends Command { 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"} + // node /Users/tz/Workspaces/eggjs/egg-scriptsx/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 ? diff --git a/lib/cmd/start.js b/lib/cmd/start.js index f6e5a99..f35d366 100644 --- a/lib/cmd/start.js +++ b/lib/cmd/start.js @@ -16,7 +16,7 @@ const utils = require('egg-utils'); class StartCommand extends Command { constructor(rawArgv) { super(rawArgv); - this.usage = 'Usage: egg-scripts start [options] [baseDir]'; + this.usage = 'Usage: egg-scriptsx start [options] [baseDir]'; this.serverBin = path.join(__dirname, '../start-cluster'); this.options = { diff --git a/lib/cmd/stop.js b/lib/cmd/stop.js index 5356c40..1162ab7 100644 --- a/lib/cmd/stop.js +++ b/lib/cmd/stop.js @@ -15,7 +15,7 @@ class StopCommand extends Command { constructor(rawArgv) { super(rawArgv); - this.usage = 'Usage: egg-scripts stop [--title=example]'; + this.usage = 'Usage: egg-scriptsx stop [--title=example]'; this.serverBin = path.join(__dirname, '../start-cluster'); this.options = { title: { @@ -34,7 +34,7 @@ class StopCommand extends Command { 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"} + // node /Users/tz/Workspaces/eggjs/egg-scriptsx/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 ? diff --git a/lib/command.js b/lib/command.js index bd53436..38a2a21 100644 --- a/lib/command.js +++ b/lib/command.js @@ -29,7 +29,7 @@ class Command extends BaseCommand { }; this.logger = new Logger({ - prefix: '[egg-scripts] ', + prefix: '[egg-scriptsx] ', time: false, }); } diff --git a/package.json b/package.json index c8e736d..e94bb06 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "egg-scriptsx", - "version": "2.11.2", + "version": "2.11.3", "description": "deploy tool for egg project", "main": "index.js", "bin": { - "egg-scripts": "bin/egg-scripts.js", - "eggctl": "bin/egg-scripts.js" + "egg-scriptsx": "bin/egg-scriptsx.js", + "eggctlx": "bin/egg-scriptsx.js" }, "dependencies": { "await-event": "^2.1.0",