#70995: Prevent cron re-runs

5.x
Steven Wittens 2006-10-03 00:24:19 +00:00
parent 4bd256a20f
commit aae945c369
2 changed files with 50 additions and 13 deletions

View File

@ -1698,24 +1698,56 @@ function drupal_cron_run() {
set_time_limit(240);
}
// Check if the last cron run completed
if (variable_get('cron_busy', FALSE)) {
watchdog('cron', t('Last cron run did not complete.'), WATCHDOG_WARNING);
// Fetch the cron semaphore
$semaphore = variable_get('cron_semaphore', FALSE);
if ($semaphore) {
if (time() - $semaphore > 3600) {
// Either cron has been running for more than an hour or the semaphore
// was not reset due to a database error.
watchdog('cron', t('Cron has been running for more than an hour and is most likely stuck.'), WATCHDOG_ERROR);
// Release cron semaphore
variable_del('cron_semaphore');
}
else {
// Cron is still running normally.
watchdog('cron', t('Attempting to re-run cron while it is already running.'), WATCHDOG_WARNING);
}
}
else {
variable_set('cron_busy', TRUE);
// Register shutdown callback
register_shutdown_function('drupal_cron_cleanup');
// Lock cron semaphore
variable_set('cron_semaphore', time());
// Iterate through the modules calling their cron handlers (if any):
module_invoke_all('cron');
// Record cron time
variable_set('cron_last', time());
watchdog('cron', t('Cron run completed.'), WATCHDOG_NOTICE);
// Release cron semaphore
variable_del('cron_semaphore');
// Return TRUE so other functions can check if it did run successfully
return TRUE;
}
}
// Iterate through the modules calling their cron handlers (if any):
module_invoke_all('cron');
/**
* Shutdown function for cron cleanup.
*/
function drupal_cron_cleanup() {
// See if the semaphore is still locked.
if (variable_get('cron_semaphore', FALSE)) {
watchdog('cron', t('Cron run exceeded the time limit and was aborted.'), WATCHDOG_WARNING);
// Clean up
variable_set('cron_busy', FALSE);
variable_set('cron_last', time());
watchdog('cron', t('Cron run completed.'), WATCHDOG_NOTICE);
// Return TRUE so other functions can check if it did run successfully
return TRUE;
// Release cron semaphore
variable_del('cron_semaphore');
}
}
/**

View File

@ -3337,6 +3337,11 @@ function system_update_1013() {
return $ret;
}
function system_update_1014() {
variable_del('cron_busy');
return array();
}
/**
* @} End of "defgroup updates-4.7-to-x.x"
* The next series of updates should start at 2000.