diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php index 64c2d026ab46fb8d22853f1bf1ca361a38913327..00f8d5d6ae002ffb7512354e70f6a696830b6831 100644 --- a/htdocs/cron/class/cronjob.class.php +++ b/htdocs/cron/class/cronjob.class.php @@ -439,7 +439,6 @@ class Cronjob extends CommonObject { while ($i < $num) { - $line = new Cronjobline(); $obj = $this->db->fetch_object($resql); @@ -480,7 +479,6 @@ class Cronjob extends CommonObject $this->lines[]=$line; $i++; - } } $this->db->free($resql); diff --git a/htdocs/public/cron/cron_run_jobs.php b/htdocs/public/cron/cron_run_jobs.php index 725aea8825debc814d212d3162c1539cddc4da63..36b21c514e987631435268367b82aaaef2417393 100644 --- a/htdocs/public/cron/cron_run_jobs.php +++ b/htdocs/public/cron/cron_run_jobs.php @@ -125,19 +125,25 @@ if ($result<0) exit; } +$qualifiedjobs = array(); +foreach($object->lines as $val) +{ + if (! verifCond($val->test)) continue; + $qualifiedjobs[] = $val; +} // TODO Duplicate code. This sequence of code must be shared with code into cron_run_jobs.php script. // current date $now=dol_now(); -$nbofjobs=count($object->lines); +$nbofjobs=count($qualifiedjobs); $nbofjobslaunchedok=0; $nbofjobslaunchedko=0; -if (is_array($object->lines) && (count($object->lines)>0)) +if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0)) { // Loop over job - foreach($object->lines as $line) + foreach($qualifiedjobs as $line) { dol_syslog("cron_run_jobs.php cronjobid: ".$line->id, LOG_WARNING); @@ -150,16 +156,16 @@ if (is_array($object->lines) && (count($object->lines)>0)) $result=$cronjob->fetch($line->id); if ($result<0) { - echo "Error:".$cronjob->error."<br>\n"; - dol_syslog("cron_run_jobs.php:: fetch Error".$cronjob->error, LOG_ERR); + echo "Error cronjob->fetch: ".$cronjob->error."<br>\n"; + dol_syslog("cron_run_jobs.php::fetch Error".$cronjob->error, LOG_ERR); exit; } // Execut job $result=$cronjob->run_jobs($userlogin); if ($result < 0) { - echo "Error:".$cronjob->error."<br>\n"; - dol_syslog("cron_run_jobs.php:: run_jobs Error".$cronjob->error, LOG_ERR); + echo "Error cronjob->run_job: ".$cronjob->error."<br>\n"; + dol_syslog("cron_run_jobs.php::run_jobs Error".$cronjob->error, LOG_ERR); $nbofjobslaunchedko++; } else @@ -171,8 +177,8 @@ if (is_array($object->lines) && (count($object->lines)>0)) $result=$cronjob->reprogram_jobs($userlogin, $now); if ($result<0) { - echo "Error:".$cronjob->error."<br>\n"; - dol_syslog("cron_run_jobs.php:: reprogram_jobs Error".$cronjob->error, LOG_ERR); + echo "Error cronjob->reprogram_job: ".$cronjob->error."<br>\n"; + dol_syslog("cron_run_jobs.php::reprogram_jobs Error".$cronjob->error, LOG_ERR); exit; } diff --git a/scripts/cron/cron_run_jobs.php b/scripts/cron/cron_run_jobs.php index 841e85e144372830070032ace5012989709b437d..6ec317cdc708fae5928e824dddb9efda11550036 100755 --- a/scripts/cron/cron_run_jobs.php +++ b/scripts/cron/cron_run_jobs.php @@ -79,7 +79,7 @@ if ($key != $conf->global->CRON_KEY) exit(-1); } -// If param userlogin is reserved word 'firstadmin' +// If param userlogin is reserved word 'firstadmin' if ($userlogin == 'firstadmin') { $sql='SELECT login from '.MAIN_DB_PREFIX.'user WHERE admin = 1 and statut = 1 ORDER BY entity LIMIT 1'; @@ -87,7 +87,7 @@ if ($userlogin == 'firstadmin') if ($resql) { $obj=$db->fetch_object($resql); - if ($obj) + if ($obj) { $userlogin = $obj->login; echo "First admin user found is login '".$userlogin."'\n"; @@ -136,27 +136,37 @@ if ($result<0) exit(-1); } +$qualifiedjobs = array(); +foreach($object->lines as $val) +{ + if (! verifCond($val->test)) continue; + $qualifiedjobs[] = $val; +} + // TODO This sequence of code must be shared with code into public/cron/cron_run_jobs.php php page. // current date $now=dol_now(); +$nbofjobs=count($qualifiedjobs); +$nbofjobslaunchedok=0; +$nbofjobslaunchedko=0; -if(is_array($object->lines) && (count($object->lines)>0)) +if(is_array($qualifiedjobs) && (count($qualifiedjobs)>0)) { // Loop over job - foreach($object->lines as $line) + foreach($qualifiedjobs as $line) { dol_syslog("cron_run_jobs.php cronjobid: ".$line->id, LOG_DEBUG); echo "cron_run_jobs.php cronjobid: ".$line->id."\n"; - + //If date_next_jobs is less of current date, execute the program, and store the execution time of the next execution in database if (($line->datenextrun < $now) && (empty($line->datestart) || $line->datestart <= $now) && (empty($line->dateend) || $line->dateend >= $now)) { dol_syslog("cron_run_jobs.php:: to run line->datenextrun:".dol_print_date($line->datenextrun,'dayhourrfc')." line->datestart:".dol_print_date($line->datestart,'dayhourrfc')." line->dateend:".dol_print_date($line->dateend,'dayhourrfc')." now:".dol_print_date($now,'dayhourrfc')); - + $cronjob=new Cronjob($db); $result=$cronjob->fetch($line->id); - if ($result<0) + if ($result < 0) { echo "Error cronjob->fetch: ".$cronjob->error."\n"; echo "Failed to fetch job ".$line->id."\n"; @@ -165,18 +175,22 @@ if(is_array($object->lines) && (count($object->lines)>0)) } // Execute job $result=$cronjob->run_jobs($userlogin); - if ($result<0) + if ($result < 0) { echo "Error cronjob->run_job: ".$cronjob->error."\n"; echo "At least one job failed. Go on menu Home-Setup-Admin tools to see result for each job.\n"; echo "You can also enable module Log if not yet enabled, run again and take a look into dolibarr.log file\n"; dol_syslog("cron_run_jobs.php::run_jobs Error ".$cronjob->error, LOG_ERR); - exit(-1); + $nbofjobslaunchedko++; + } + else + { + $nbofjobslaunchedok++; } // we re-program the next execution and stores the last execution time for this job $result=$cronjob->reprogram_jobs($userlogin, $now); - if ($result<0) + if ($result<0) { echo "Error cronjob->reprogram_job: ".$cronjob->error."\n"; echo "Enable module Log if not yet enabled, run again and take a look into dolibarr.log file\n"; @@ -194,6 +208,7 @@ if(is_array($object->lines) && (count($object->lines)>0)) $db->close(); +if ($nbofjobslaunchedko) exit(1); exit(0);