From 31bef9bdc897edae7e0bd179c97c78f364f1071f Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Wed, 6 Jun 2018 10:29:43 +0800 Subject: [PATCH] MDL-62651 tool_task: Add adhoc CLI runner --- admin/tool/task/cli/adhoc_task.php | 117 +++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 admin/tool/task/cli/adhoc_task.php diff --git a/admin/tool/task/cli/adhoc_task.php b/admin/tool/task/cli/adhoc_task.php new file mode 100644 index 00000000000..f44f9d6483c --- /dev/null +++ b/admin/tool/task/cli/adhoc_task.php @@ -0,0 +1,117 @@ +. + +/** + * Task executor for adhoc tasks. + * + * @package tool_task + * @copyright 2018 Andrew Nicols + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +define('CLI_SCRIPT', true); + +require(__DIR__ . '/../../../../config.php'); +require_once("{$CFG->libdir}/clilib.php"); +require_once("{$CFG->libdir}/cronlib.php"); + +list($options, $unrecognized) = cli_get_params( + [ + 'execute' => false, + 'help' => false, + 'showsql' => false, + 'showdebugging' => false, + ], [ + 'h' => 'help', + ] +); + +if ($unrecognized) { + $unrecognized = implode("\n ", $unrecognized); + cli_error(get_string('cliunknowoption', 'admin', $unrecognized)); +} + +if ($options['help'] or empty($options['execute'])) { + $help = +"Scheduled cron tasks. + +Options: +--showsql Show sql queries before they are executed +--showdebugging Show developer level debugging information +--execute Run all queued adhoc tasks +-h, --help Print out this help + +Example: +\$sudo -u www-data /usr/bin/php admin/tool/task/cli/adhoc_task.php --execute + +"; + + echo $help; + die; +} + +if ($options['showdebugging']) { + set_debugging(DEBUG_DEVELOPER, true); +} + +if ($options['showsql']) { + $DB->set_debug(true); +} + +if (CLI_MAINTENANCE) { + echo "CLI maintenance mode active, cron execution suspended.\n"; + exit(1); +} + +if (moodle_needs_upgrading()) { + echo "Moodle upgrade pending, cron execution suspended.\n"; + exit(1); +} + +if (empty($options['execute'])) { + exit(0); +} + +if (!empty($CFG->showcronsql)) { + $DB->set_debug(true); +} +if (!empty($CFG->showcrondebugging)) { + set_debugging(DEBUG_DEVELOPER, true); +} + +core_php_time_limit::raise(); +$starttime = microtime(); + +// Increase memory limit. +raise_memory_limit(MEMORY_EXTRA); + +// Emulate normal session - we use admin accoutn by default. +cron_setup_user(); + +// Start output log. +$timenow = time(); +$humantimenow = date('r', $timenow); +mtrace("Server Time: {$humantimenow}\n"); + +// Run all adhoc tasks. +$taskcount = 0; +while (!\core\task\manager::static_caches_cleared_since($timenow) && + $task = \core\task\manager::get_next_adhoc_task($timenow)) { + cron_run_inner_adhoc_task($task); + $taskcount++; + unset($task); +} +mtrace("Ran {$taskcount} adhoc tasks found at {$humantimenow}"); -- 2.43.0