diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php index 66886eb01e..cbf02f161c 100644 --- a/src/applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php +++ b/src/applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php @@ -19,6 +19,12 @@ final class PhabricatorDaemonManagementRestartWorkflow 'seconds. Defaults to __15__ seconds.'), 'default' => 15, ), + array( + 'name' => 'gently', + 'help' => pht( + 'Ignore running processes that look like daemons but do not '. + 'have corresponding PID files.'), + ), array( 'name' => 'force', 'help' => pht( @@ -29,12 +35,17 @@ final class PhabricatorDaemonManagementRestartWorkflow } public function execute(PhutilArgumentParser $args) { - $graceful = $args->getArg('graceful'); - $force = $args->getArg('force'); - $err = $this->executeStopCommand(array(), $graceful, $force); + $err = $this->executeStopCommand( + array(), + array( + 'graceful' => $args->getArg('graceful'), + 'force' => $args->getArg('force'), + 'gently' => $args->getArg('gently'), + )); if ($err) { return $err; } + return $this->executeStartCommand(); } diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php index e40437e306..e57c617c83 100644 --- a/src/applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php +++ b/src/applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php @@ -26,6 +26,12 @@ final class PhabricatorDaemonManagementStopWorkflow 'Also stop running processes that look like daemons but do '. 'not have corresponding PID files.'), ), + array( + 'name' => 'gently', + 'help' => pht( + 'Ignore running processes that look like daemons but do not '. + 'have corresponding PID files.'), + ), array( 'name' => 'pids', 'wildcard' => true, @@ -34,10 +40,13 @@ final class PhabricatorDaemonManagementStopWorkflow } public function execute(PhutilArgumentParser $args) { - $pids = $args->getArg('pids'); - $graceful = $args->getArg('graceful'); - $force = $args->getArg('force'); - return $this->executeStopCommand($pids, $graceful, $force); + return $this->executeStopCommand( + $args->getArg('pids'), + array( + 'graceful' => $args->getArg('graceful'), + 'force' => $args->getArg('force'), + 'gently' => $args->getArg('gently'), + )); } } diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php index b9ca57428c..c5851e83f0 100644 --- a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php +++ b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php @@ -361,15 +361,25 @@ abstract class PhabricatorDaemonManagementWorkflow protected final function executeStopCommand( array $pids, - $grace_period, - $force) { + array $options) { $console = PhutilConsole::getConsole(); + $grace_period = idx($options, 'graceful', 15); + $force = idx($options, 'force'); + $gently = idx($options, 'gently'); + + if ($gently && $force) { + throw new PhutilArgumentUsageException( + pht( + 'You can not specify conflicting options --gently and --force '. + 'together.')); + } + $daemons = $this->loadRunningDaemons(); if (!$daemons) { $survivors = array(); - if (!$pids) { + if (!$pids && !$gently) { $survivors = $this->processRogueDaemons( $grace_period, $warn = true, @@ -421,7 +431,9 @@ abstract class PhabricatorDaemonManagementWorkflow } } - $this->processRogueDaemons($grace_period, !$pids, $force); + if (!$gently) { + $this->processRogueDaemons($grace_period, !$pids, $force); + } return 0; }