issue #9: adding check to prevent cronjob from running multiple times

This commit is contained in:
Pepijn Over 2014-02-08 21:16:41 +01:00
parent 10f9d666d2
commit 17c7f3b3c3
4 changed files with 20 additions and 1 deletions

View File

@ -14,6 +14,7 @@
- Adding Portuguese / Brazilian language file (thanks to Luiz Alberto S. Ribeiro).
- Large status page by Michael Greenhill.
- New config file (see install instructions in README).
- Cronjob will be prevented from running multiple times at the same time (with a 10 mins timeout).
#########################
#

View File

@ -125,6 +125,9 @@ If it is your own server or you have shell access and permission to open the cro
As you can see, this line will run the status.cron.php script every 15 minutes. Change the line to suit your needs.
If you do not have shell access, ask your web hosting provider to set it up for you.
The update script has been designed to prevent itself from running multiple times. It has a maximum timeout of 10 minutes.
After that the script is assumed dead and the cronjob will run again.
## CUSTOMIZING

View File

@ -28,6 +28,15 @@
// include main configuration and functionality
require_once dirname(__FILE__) . '/../src/bootstrap.php';
// prevent cron from running twice at the same time
// however if the cron has been running for 10 mins, we'll assume it died and run anyway
$time = time();
if(psm_get_conf('cron_running') == 1 && ($time - psm_get_conf('cron_running_time') < 600)) {
die('Cron is already running. Exiting.');
}
psm_update_conf('cron_running', 1);
psm_update_conf('cron_running_time', $time);
// get the active servers from database
$servers = $db->select(
PSM_DB_PREFIX.'servers',
@ -70,4 +79,6 @@ foreach ($servers as $server) {
);
}
psm_update_conf('cron_running', 0);
?>

View File

@ -110,13 +110,17 @@ class Queries {
('version', '{$version}'),
('auto_refresh_servers', '0'),
('show_update', '1'),
('last_update_check', '0');";
('last_update_check', '0'),
('cron_running', '0'),
('cron_running_time', '0');";
} else {
if(version_compare($version_from, '2.1.0', '<')) {
// 2.0 upgrade
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` DROP `config_id`;";
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` ADD PRIMARY KEY ( `key` );";
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` DROP INDEX `key`;";
$queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUES ('cron_running', '0');";
$queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUES ('cron_running_time', '0');";
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `error` `error` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;";
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `rtime` `rtime` FLOAT( 9, 7 ) NULL;";