BUG 9630 "cron.php script can have several instances running..." SOLVED

- cron.php script can have several instances running at the same time
- Problem solved, added validation in cron.php script to avoid run
  several times
* Available from version 2.0.44
This commit is contained in:
Victor Saisa Lopez
2012-08-30 15:05:39 -04:00
parent 53bac5cef7
commit dfb10bc7aa
2 changed files with 65 additions and 66 deletions

View File

@@ -52,51 +52,56 @@ define ('MEMCACHED_ENABLED', $config['memcached']);
define ('MEMCACHED_SERVER', $config['memcached_server']);
define ('TIME_ZONE', $config['time_zone']);
//default values
//Default values
$bCronIsRunning = false;
$sLastExecution = '';
if ( file_exists(PATH_DATA . 'cron') ) {
$aAux = unserialize( trim( @file_get_contents(PATH_DATA . 'cron')) );
$bCronIsRunning = (boolean)$aAux['bCronIsRunning'];
$sLastExecution = $aAux['sLastExecution'];
}
else {
//if not exists the file, just create a new one with current date
@file_put_contents(PATH_DATA . 'cron', serialize(array('bCronIsRunning' => '1', 'sLastExecution' => date('Y-m-d H:i:s'))));
$sLastExecution = null;
if (file_exists(PATH_DATA . "cron")) {
$arrayAux = unserialize(trim(@file_get_contents(PATH_DATA . "cron")));
$bCronIsRunning = (boolean)($arrayAux["bCronIsRunning"]);
$sLastExecution = $arrayAux["sLastExecution"];
}
$WS = '';
$argsx = '';
$sDate = '';
if (!$bCronIsRunning) {
//Start cron
$arrayAux = array("bCronIsRunning" => "1", "sLastExecution" => date("Y-m-d H:i:s"));
@file_put_contents(PATH_DATA . "cron", serialize($arrayAux));
//Data
$ws = null;
$argsx = null;
$sDate = null;
$dateSystem = date("Y-m-d H:i:s");
for ($i = 1; $i <= count($argv) - 1; $i++) {
if( strpos($argv[$i], '+d') !== false){
if (strpos($argv[$i], "+d") !== false) {
$sDate = substr($argv[$i],2);
} else if( strpos($argv[$i], '+w') !== false){
$WS = substr($argv[$i],2);
} else {
$argsx .= ' '.$argv[$i];
if (strpos($argv[$i], "+w") !== false) {
$ws = substr($argv[$i], 2);
} else {
$argsx = $argsx . " " . $argv[$i];
}
}
}
//if $sDate is not set, so take the system time
if ($sDate != "") {
//If $sDate is not set, so take the system time
if ($sDate != null) {
eprintln("[Applying date filter: $sDate]");
} else {
$sDate = $dateSystem;
}
if( $WS=='' ){
if ($ws == null) {
$oDirectory = dir(PATH_DB);
$cws = 0;
while($sObject = $oDirectory->read()) {
if (($sObject != '.') && ($sObject != '..')) {
if (is_dir(PATH_DB . $sObject)) {
if (file_exists(PATH_DB . $sObject . PATH_SEP . 'db.php')) {
$cws++;
while($sObject = $oDirectory->read()) {
if (($sObject != ".") && ($sObject != "..")) {
if (is_dir(PATH_DB . $sObject)) {
if (file_exists(PATH_DB . $sObject . PATH_SEP . "db.php")) {
$cws = $cws + 1;
system("php -f \"".dirname(__FILE__).PATH_SEP."cron_single.php\" $sObject \"$sDate\" \"$dateSystem\" $argsx", $retval);
}
}
@@ -104,7 +109,16 @@ if( $WS=='' ){
}
} else {
$cws = 1;
system("php -f \"".dirname(__FILE__).PATH_SEP."cron_single.php\" $WS \"$sDate\" \"$dateSystem\" $argsx", $retval);
}
eprintln("Finished $cws workspaces processed.");
system("php -f \"".dirname(__FILE__).PATH_SEP."cron_single.php\" $ws \"$sDate\" \"$dateSystem\" $argsx", $retval);
}
//End cron
$arrayAux = array("bCronIsRunning" => "0", "sLastExecution" => date("Y-m-d H:i:s"));
@file_put_contents(PATH_DATA . "cron", serialize($arrayAux));
eprintln("Finished $cws workspaces processed.");
} else {
eprintln("The cron is running, please wait for it to finish.\n- Started in $sLastExecution");
}

View File

@@ -97,21 +97,6 @@ require_once ("classes/model/AppEvent.php");
require_once ("classes/model/CaseScheduler.php");
//G::loadClass("pmScript");
//default values
$bCronIsRunning = false;
$sLastExecution = '';
if (file_exists(PATH_DATA . 'cron')) {
$arrayAux = unserialize(trim(@file_get_contents(PATH_DATA . 'cron')));
$bCronIsRunning = (boolean)($arrayAux['bCronIsRunning']);
$sLastExecution = $arrayAux['sLastExecution'];
} else {
//if not exists the file, just create a new one with current date
$arrayAux = array('bCronIsRunning' => '1', 'sLastExecution' => date('Y-m-d H:i:s'));
@file_put_contents(PATH_DATA . 'cron', serialize($arrayAux));
}
if (!defined('SYS_SYS')) {
$sObject = $argv[1];
$sNow = $argv[2];
@@ -221,9 +206,9 @@ if (!defined('SYS_SYS')) {
processWorkspace();
}
//finally update the file
$arrayAux = array('bCronIsRunning' => '0', 'sLastExecution' => date('Y-m-d H:i:s'));
@file_put_contents(PATH_DATA . 'cron', serialize($arrayAux));
function processWorkspace()
{