Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
/admin/cli/ -> cron.php (source)
<?php
<
// This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * CLI cron * * This script looks through all the module directories for cron.php files * and runs them. These files can contain cleanup functions, email functions * or anything that needs to be run on a regular basis. * * @package core * @subpackage cli * @copyright 2009 Petr Skoda (http://skodak.org) * @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'); // cli only functions < require_once($CFG->libdir.'/cronlib.php');
> require_once($CFG->libdir . '/clilib.php');
< // now get cli options < list($options, $unrecognized) = cli_get_params(
> // Now get cli option. > [$options, $unrecognized] = cli_get_params(
[ 'help' => false, 'stop' => false, 'list' => false, 'force' => false, 'enable' => false, 'disable' => false, 'disable-wait' => false,
< ], [
> 'keep-alive' => null, > ], > [
'h' => 'help', 's' => 'stop', 'l' => 'list', 'f' => 'force', 'e' => 'enable', 'd' => 'disable', 'w' => 'disable-wait',
> 'k' => 'keep-alive',
] ); if ($unrecognized) { $unrecognized = implode("\n ", $unrecognized); cli_error(get_string('cliunknowoption', 'admin', $unrecognized)); } if ($options['help']) { $help = "Execute periodic cron actions. Options: -h, --help Print out this help -s, --stop Notify all other running cron processes to stop after the current task -l, --list Show the list of currently running tasks and how long they have been running -f, --force Execute task even if cron is disabled -e, --enable Enable cron -d, --disable Disable cron -w, --disable-wait=600 Disable cron and wait until all tasks finished or fail after N seconds (optional param)
> -k, --keep-alive=N Keep this script alive for N seconds and poll for new tasks > The default value can be set by administrators in: Example: > Site administration > Server > Tasks > Task processing > Keep alive time
\$sudo -u www-data /usr/bin/php admin/cli/cron.php "; echo $help; die; } if ($options['stop']) { // By clearing the caches this signals to other running processes // to exit after finishing the current task. \core\task\manager::clear_static_caches(); die; } if ($options['enable']) { set_config('cron_enabled', 1); mtrace('Cron has been enabled for the site.'); exit(0); } if ($options['disable']) { set_config('cron_enabled', 0); \core\task\manager::clear_static_caches(); mtrace('Cron has been disabled for the site.'); exit(0); } if ($options['list']) { $tasks = \core\task\manager::get_running_tasks(); mtrace('The list of currently running tasks:'); $format = "%7s %-12s %-9s %-20s %-52s\n";
< printf ($format,
> printf( > $format,
'PID', 'HOST', 'TYPE', 'TIME', 'CLASSNAME' ); foreach ($tasks as $task) {
< printf ($format,
> printf( > $format,
$task->pid, substr($task->hostname, 0, 12), $task->type, format_time(time() - $task->timestarted), substr($task->classname, 0, 52) ); } exit(0); } if ($wait = $options['disable-wait']) { $started = time(); if (true === $wait) { // Default waiting time. $waitsec = 600; } else { $waitsec = $wait; $wait = true; } set_config('cron_enabled', 0); \core\task\manager::clear_static_caches(); mtrace('Cron has been disabled for the site.'); mtrace('Allocating '. format_time($waitsec) . ' for the tasks to finish.'); $lastcount = 0; while ($wait) { $tasks = \core\task\manager::get_running_tasks(); if (count($tasks) == 0) { mtrace(''); mtrace('All scheduled and adhoc tasks finished.'); exit(0); } if (time() - $started >= $waitsec) { mtrace(''); mtrace('Wait time ('. format_time($waitsec) . ') elapsed, but ' . count($tasks) . ' task(s) still running.'); mtrace('Exiting with code 1.'); exit(1); } if (count($tasks) !== $lastcount) { mtrace(''); mtrace(count($tasks) . " tasks currently running.", ''); $lastcount = count($tasks); } else { mtrace('.', ''); } sleep(1); } } if (!get_config('core', 'cron_enabled') && !$options['force']) { mtrace('Cron is disabled. Use --force to override.'); exit(1); } \core\local\cli\shutdown::script_supports_graceful_exit();
< cron_run();
> > $keepalive = $options['keep-alive']; > \core\cron::run_main_process($keepalive);