function drupal_cron_run
7.x common.inc | drupal_cron_run() |
6.x common.inc | drupal_cron_run() |
Executes a cron run when called.
Do not call this function from a test. Use $this->cronRun() instead.
Return value
TRUE if cron ran successfully.
7 calls to drupal_cron_run()
- cron.php in drupal-7.x/
cron.php - Handles incoming requests to fire off regularly-scheduled tasks (cron jobs).
- DrupalWebTestCase::setUp in drupal-7.x/
modules/ simpletest/ drupal_web_test_case.php - Sets up a Drupal site for running functional and integration tests.
- install_finished in drupal-7.x/
includes/ install.core.inc - Finishes importing files at end of installation.
- PollExpirationTestCase::testAutoExpire in drupal-7.x/
modules/ poll/ poll.test - system_run_automated_cron in drupal-7.x/
modules/ system/ system.module - Run the automated cron if enabled.
File
- drupal-7.x/
includes/ common.inc, line 5227 - Common functions that many Drupal modules will need to reference.
Code
function drupal_cron_run() {
// Allow execution to continue even if the request gets canceled.
@ignore_user_abort(TRUE);
// Prevent session information from being saved while cron is running.
$original_session_saving = drupal_save_session();
drupal_save_session(FALSE);
// Force the current user to anonymous to ensure consistent permissions on
// cron runs.
$original_user = $GLOBALS['user'];
$GLOBALS['user'] = drupal_anonymous_user();
// Try to allocate enough time to run all the hook_cron implementations.
drupal_set_time_limit(240);
$return = FALSE;
// Grab the defined cron queues.
$queues = module_invoke_all('cron_queue_info');
drupal_alter('cron_queue_info', $queues);
// Try to acquire cron lock.
if (!lock_acquire('cron', 240.0)) {
// Cron is still running normally.
watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
}
else {
// Make sure every queue exists. There is no harm in trying to recreate an
// existing queue.
foreach ($queues as $queue_name => $info) {
DrupalQueue::get($queue_name)->createQueue();
}
// Register shutdown callback.
drupal_register_shutdown_function('drupal_cron_cleanup');
// Iterate through the modules calling their cron handlers (if any):
foreach (module_implements('cron') as $module) {
// Do not let an exception thrown by one module disturb another.
try {
module_invoke($module, 'cron');
}
catch (Exception $e) {
watchdog_exception('cron', $e);
}
}
// Record cron time.
variable_set('cron_last', REQUEST_TIME);
watchdog('cron', 'Cron run completed.', array(), WATCHDOG_NOTICE);
// Release cron lock.
lock_release('cron');
// Return TRUE so other functions can check if it did run successfully
$return = TRUE;
}
foreach ($queues as $queue_name => $info) {
if (!empty($info['skip on cron'])) {
// Do not run if queue wants to skip.
continue;
}
$function = $info['worker callback'];
$end = time() + (isset($info['time']) ? $info['time'] : 15);
$queue = DrupalQueue::get($queue_name);
while (time() < $end && ($item = $queue->claimItem())) {
$function($item->data);
$queue->deleteItem($item);
}
}
// Restore the user.
$GLOBALS['user'] = $original_user;
drupal_save_session($original_session_saving);
return $return;
}