From d9fd10e3cbbc85881d0f46872858e44d302447ee Mon Sep 17 00:00:00 2001 From: jshkurti Date: Thu, 12 Mar 2015 17:12:49 +0100 Subject: [PATCH] Fixed conflict between `pm2 kill` and `watcher restart` --- lib/CLI.js | 1 + lib/God/ActionMethods.js | 17 +++++++++++++++-- lib/God/DeprecatedCalls.js | 2 ++ lib/Satan.js | 1 + 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/CLI.js b/lib/CLI.js index 44fbd908..9abad97f 100644 --- a/lib/CLI.js +++ b/lib/CLI.js @@ -1418,6 +1418,7 @@ CLI.ilogs = function() { CLI.killDaemon = function(cb) { printOut(cst.PREFIX_MSG + 'Stopping PM2...'); + Satan.executeRemote('notifyKillPM2', {}, function() {}); CLI.killAllModules(function() { CLI._operate('deleteProcessId', 'all', function(err, list) { printOut(cst.PREFIX_MSG + 'All processes has been stopped and deleted'); diff --git a/lib/God/ActionMethods.js b/lib/God/ActionMethods.js index 037a156b..a0f33d86 100644 --- a/lib/God/ActionMethods.js +++ b/lib/God/ActionMethods.js @@ -150,6 +150,14 @@ module.exports = function(God) { return cb(null, {msg : 'pong'}); }; + /** + * Description + * @method notifyKillPM2 + */ + God.notifyKillPM2 = function() { + God.pm2_being_killed = true; + }; + /** * Start a stopped process by ID * @method startProcessId @@ -335,8 +343,13 @@ module.exports = function(God) { Common.extend(proc.pm2_env.env, opts.env); - if (proc.pm2_env.status == cst.ONLINE_STATUS) { + if (God.pm2_being_killed) { + return cb('PM2 is being killed, stopping restart procedure...'); + } + if (proc.pm2_env.status === cst.ONLINE_STATUS) { God.stopProcessId(id, function(err) { + if (God.pm2_being_killed) + return cb('PM2 is being killed, stopping restart procedure...'); proc.pm2_env.restart_time += 1; return God.startProcessId(id, cb); }); @@ -345,7 +358,7 @@ module.exports = function(God) { } else { debug('[restart] process not online, starting it'); - God.startProcessId(id, cb); + return God.startProcessId(id, cb); } return false; }; diff --git a/lib/God/DeprecatedCalls.js b/lib/God/DeprecatedCalls.js index 4a1d2cc4..2d027022 100644 --- a/lib/God/DeprecatedCalls.js +++ b/lib/God/DeprecatedCalls.js @@ -112,6 +112,8 @@ module.exports = function(God) { return cb(God.logAndGenerateError('Unknown process'), {}); async.eachLimit(processes, cst.CONCURRENT_ACTIONS, function(proc, next) { + if (God.pm2_being_killed) + return next('[Watch] PM2 is being killed, stopping restart procedure...'); if (proc.pm2_env.status === cst.ONLINE_STATUS) return God.restartProcessId({id:proc.pm2_env.pm_id}, next); else if (proc.pm2_env.status !== cst.STOPPING_STATUS diff --git a/lib/Satan.js b/lib/Satan.js index 81e1d7c4..24698dfe 100644 --- a/lib/Satan.js +++ b/lib/Satan.js @@ -188,6 +188,7 @@ Satan.remoteWrapper = function() { notifyByProcessId : God.notifyByProcessId, killMe : God.killMe, + notifyKillPM2 : God.notifyKillPM2, findByScript : God.findByScript, findByPort : God.findByPort,