From b15c53f4fa012f2c505e1e30dc53a5b44cc2ed89 Mon Sep 17 00:00:00 2001 From: Brendan Heywood Date: Mon, 30 Dec 2019 12:51:14 +1100 Subject: [PATCH] MDL-59594 cron: Allow graceful exit of cron and adhoc task cli's --- admin/cli/cron.php | 2 ++ admin/tool/task/cli/adhoc_task.php | 2 ++ lib/cronlib.php | 6 ++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/admin/cli/cron.php b/admin/cli/cron.php index d7d16461dbe..fe726830117 100644 --- a/admin/cli/cron.php +++ b/admin/cli/cron.php @@ -74,4 +74,6 @@ if ($options['stop']) { die; } +\core\local\cli\shutdown::script_supports_graceful_exit(); + cron_run(); diff --git a/admin/tool/task/cli/adhoc_task.php b/admin/tool/task/cli/adhoc_task.php index 755026b90fb..1a04ba8bfdf 100644 --- a/admin/tool/task/cli/adhoc_task.php +++ b/admin/tool/task/cli/adhoc_task.php @@ -115,5 +115,7 @@ cron_setup_user(); $humantimenow = date('r', time()); $keepalive = (int)$options['keep-alive']; +\core\local\cli\shutdown::script_supports_graceful_exit(); + mtrace("Server Time: {$humantimenow}\n"); cron_run_adhoc_tasks(time(), $keepalive, $checklimits); diff --git a/lib/cronlib.php b/lib/cronlib.php index 0adbcc91bc5..f15fae8dc85 100644 --- a/lib/cronlib.php +++ b/lib/cronlib.php @@ -114,7 +114,8 @@ function cron_run_scheduled_tasks(int $timenow) { // Run all scheduled tasks. try { - while (!\core\task\manager::static_caches_cleared_since($timenow) && + while (!\core\local\cli\shutdown::should_gracefully_exit() && + !\core\task\manager::static_caches_cleared_since($timenow) && $task = \core\task\manager::get_next_scheduled_task($timenow)) { cron_run_inner_scheduled_task($task); unset($task); @@ -167,7 +168,8 @@ function cron_run_adhoc_tasks(int $timenow, $keepalive = 0, $checklimits = true) $taskcount = 0; // Run all adhoc tasks. - while (!\core\task\manager::static_caches_cleared_since($timenow)) { + while (!\core\local\cli\shutdown::should_gracefully_exit() && + !\core\task\manager::static_caches_cleared_since($timenow)) { if ($checklimits && (time() - $timenow) >= $maxruntime) { if ($waiting) {