Error message

You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).

function system_cron

Same name and namespace in other branches
  1. 10 core/modules/system/system.module \system_cron()
  2. 9 core/modules/system/system.module \system_cron()
  3. 8.9.x core/modules/system/system.module \system_cron()

Implements hook_cron().

Remove older rows from flood and batch table. Remove old temporary files.

File

modules/system/system.module, line 3079

Code

function system_cron () {
 // Cleanup the flood.
 db_delete ('flood')->condition ('expiration', REQUEST_TIME , '<')
 ->execute ();
 // Remove temporary files that are older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
 // Use separate placeholders for the status to avoid a bug in some versions
 // of PHP. See http://drupal.org/node/352956.
 $result = db_query ('SELECT fid FROM {file_managed} WHERE status <> :permanent AND timestamp < :timestamp', array(
 ':permanent' => FILE_STATUS_PERMANENT ,
 ':timestamp' => REQUEST_TIME  - DRUPAL_MAXIMUM_TEMP_FILE_AGE ,
 ));
 foreach ($result as $row) {
 if ($file = file_load ($row->fid)) {
 $references = file_usage_list ($file);
 if (empty($references)) {
 if (!file_delete ($file)) {
 watchdog ('file system', 'Could not delete temporary file "%path" during garbage collection', array(
 '%path' => $file->uri ,
 ), WATCHDOG_ERROR );
 }
 }
 else {
 watchdog ('file system', 'Did not delete temporary file "%path" during garbage collection, because it is in use by the following modules: %modules.', array(
 '%path' => $file->uri ,
 '%modules' => implode (', ', array_keys ($references)),
 ), WATCHDOG_INFO );
 }
 }
 }
 // Delete expired cache entries.
 // Avoid invoking hook_flush_cashes() on every cron run because some modules
 // use this hook to perform expensive rebuilding operations (which are only
 // designed to happen on full cache clears), rather than just returning a
 // list of cache tables to be cleared.
 $cache_object = cache_get ('system_cache_tables');
 if (empty($cache_object)) {
 $core = array(
 'cache',
 'cache_path',
 'cache_filter',
 'cache_page',
 'cache_form',
 'cache_menu',
 );
 $cache_tables = array_merge (module_invoke_all ('flush_caches'), $core);
 cache_set ('system_cache_tables', $cache_tables);
 }
 else {
 $cache_tables = $cache_object->data ;
 }
 foreach ($cache_tables as $table) {
 cache_clear_all (NULL, $table);
 }
 // Cleanup the batch table and the queue for failed batches.
 db_delete ('batch')->condition ('timestamp', REQUEST_TIME  - 864000, '<')
 ->execute ();
 db_delete ('queue')->condition ('created', REQUEST_TIME  - 864000, '<')
 ->condition ('name', 'drupal_batch:%', 'LIKE')
 ->execute ();
 // Reset expired items in the default queue implementation table. If that's
 // not used, this will simply be a no-op.
 db_update ('queue')->fields (array(
 'expire' => 0,
 ))
 ->condition ('expire', 0, '<>')
 ->condition ('expire', REQUEST_TIME , '<')
 ->execute ();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.