You are here

public function Cron::run in Drupal 9

Same name in this branch
  1. 9 core/lib/Drupal/Core/Cron.php \Drupal\Core\Cron::run()
  2. 9 core/lib/Drupal/Core/ProxyClass/Cron.php \Drupal\Core\ProxyClass\Cron::run()
Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Cron.php \Drupal\Core\Cron::run()

Executes a cron run.

Do not call this function from a test. Use $this->cronRun() instead.

Return value

bool TRUE upon success, FALSE otherwise.

Overrides CronInterface::run

File

core/lib/Drupal/Core/Cron.php, line 117

Class

Cron
The Drupal core Cron service.

Namespace

Drupal\Core

Code

public function run() {

  // Allow execution to continue even if the request gets cancelled.
  @ignore_user_abort(TRUE);

  // Force the current user to anonymous to ensure consistent permissions on
  // cron runs.
  $this->accountSwitcher
    ->switchTo(new AnonymousUserSession());

  // Try to allocate enough time to run all the hook_cron implementations.
  Environment::setTimeLimit(240);
  $return = FALSE;

  // Try to acquire cron lock.
  if (!$this->lock
    ->acquire('cron', 900.0)) {

    // Cron is still running normally.
    $this->logger
      ->warning('Attempting to re-run cron while it is already running.');
  }
  else {
    $this
      ->invokeCronHandlers();
    $this
      ->setCronLastTime();

    // Release cron lock.
    $this->lock
      ->release('cron');

    // Return TRUE so other functions can check if it did run successfully
    $return = TRUE;
  }

  // Process cron queues.
  $this
    ->processQueues();

  // Restore the user.
  $this->accountSwitcher
    ->switchBack();
  return $return;
}